<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;
}