#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
const int inf = 0x3f3f3f3f;
const long long llf = 0x3f3f3f3f3f3f3f3f;
const int maxn = (int)1e6 + 7;
const double eps = 1e-10;
const long long mod = (int)1e9 + 7;
const int dx[] = {0, 1, 0, -1};
const int dy[] = {1, 0, -1, 0};
long long dp[1000][1000][10][2];
int main() {
  std::ios::sync_with_stdio(false);
  string str;
  cin >> str;
  memset(dp, 0, sizeof(dp));
  auto n = static_cast<int>(str.length());
  for (int i = 1; i <= 9; i++) {
    dp[0][0][i][0] = 1;
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j <= i; j++) {
      for (int k = 1; k <= 9; k++) {
        for (int o = 0; o < 2; o++) {
          for (int l = 0; l <= (o ? 9 : str[i] - '0'); l++) {
            dp[i + 1][j + (l >= k)][k][o | (l < str[i] - '0')] +=
                dp[i][j][k][o];
            dp[i + 1][j + (l >= k)][k][o | (l < str[i] - '0')] %= mod;
          }
        }
      }
    }
  }
  long long ans = 0;
  for (int k = 1; k <= 9; ++k) {
    long long num = 0;
    for (int i = 1; i <= n; ++i) {
      num = (num * 10 + 1) % mod;
      ans = (((((dp[n][i][k][0] + dp[n][i][k][1]) % mod) * num) % mod) + ans) %
            mod;
    }
  }
  cout << ans << endl;
  return 0;
}
