#include <bits/stdc++.h>
using namespace std;
char w[800];
long long dp[705][705][2];
long long calc(int i, int n, int need, int lessK, int digit) {
  if (i == n) return need == 0;
  long long& ans = dp[i][need][lessK];
  if (ans >= 0) return ans;
  ans = 0;
  int maxDigit = lessK ? 9 : w[i] - '0';
  for (int d = 0; d <= maxDigit; d++) {
    ans += calc(i + 1, n, d >= digit ? max(need - 1, 0) : need,
                (d < w[i] - '0') ? 1 : lessK, digit);
    ans %= 1000000007;
  }
  return ans;
}
long long f[705][12];
int main() {
  scanf("%s", w);
  int n = strlen(w);
  long long pot10[705];
  pot10[0] = 1;
  for (int i = 1; i <= 700; i++) {
    pot10[i] = (pot10[i - 1] * 10LL) % 1000000007;
  }
  for (int i = 1; i <= 9; i++) {
    memset(dp, -1, sizeof(dp));
    for (int k = 0; k < n; k++) {
      f[k][i] = calc(0, n, k + 1, 0, i);
    }
  }
  long long ans = 0;
  for (int i = 1; i <= 9; i++) {
    for (int k = 0; k < n; k++) {
      ans += ((((f[k][i] - f[k][i + 1]) * pot10[k]) % 1000000007) * i) %
             1000000007;
      ans = (ans + 1000000007) % 1000000007;
    }
  }
  cout << ans << endl;
}
