#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int MAXN = 700 + 5;
const int MAXD = 10 + 2;
char s[MAXN];
int n;
long long dp[MAXN][MAXN][MAXD][2];
long long one[MAXN];
void add(long long &x, long long y) {
  x += y;
  if (x >= MOD) x -= MOD;
}
int main() {
  scanf("%s", s + 1);
  n = strlen(s + 1);
  for (int i = 1; i <= n; i++) one[i] = (1ll * one[i - 1] * 10 + 1) % MOD;
  for (int i = 1; i <= 9; i++) dp[0][0][i][0] = 1;
  for (int i = 0; i < n; i++)
    for (int up = 0; up < 2; up++) {
      int to = ((up) ? (9) : (s[i + 1] - 48));
      for (int j = 0; j <= i; j++)
        for (int k = 1; k <= 9; k++)
          for (int d = 0; d <= to; d++)
            add(dp[i + 1][j + (d >= k)][k][up | (d < to)], dp[i][j][k][up]);
    }
  long long ans = 0;
  for (int i = 1; i <= 9; i++)
    for (int j = 1; j <= n; j++) {
      add(ans, (dp[n][j][i][0] + dp[n][j][i][1]) % MOD * one[j] % MOD);
    }
  printf("%lld\n", ans);
  return 0;
}
