/Millionplex

<Problem>

https://oj.vnoi.info/problem/icpc21_regional_m
              /*
      f1[i] = f1[i - 1] * 10 + i * N[i]
      f[i] = 100 * f[i - 1] + f1[i - 1] * 20 * N[i] + i * N[i] * N[i]
    */
    
    #include <iostream>
    #include <string>
    using namespace std;
    
    #define LIM 1000000007
    
    int main() {
      string s;
      getline(cin, s);
    
      int len = s.length();
    
      s = " " + s;
    
      long long* f1 = new long long[1000007];
      long long* f2 = new long long[1000007];
    
      f1[1] = s[1] - '0';
      for (int i = 2; i <= len; i++) {
        f1[i] = (f1[i - 1] * 10 + i * (s[i] - '0')) % LIM;
      }
    
      f2[1] = f1[1] * f1[1];
      for (int i = 2; i <= len; i++) {
        f2[i] = (100 * f2[i - 1] + f1[i - 1] * 20 * (s[i] - '0') + i * (s[i] - '0') * (s[i] - '0')) % LIM;
      }
      
      long long ans = 0;
      for (int i = 1; i <= len; i++) {
        ans = (ans + f2[i]) % LIM;
      }
      cout << ans << endl;
    
      return 0;
    }