#include <bits/stdc++.h>
using namespace std;
const int N = 11;
const long long MOD = 1000000007LL;
int dp[N][N][3];
long long t[N][N];
int cnt[N], c[N];
int n;
string s;
long long ans = 0;
void init() {
  for (int i = 0; i <= n; ++i) {
    for (int k = 1; k <= 6; ++k) {
      if (cnt[i] < k)
        t[i][k] = 0;
      else {
        t[i][k] = 1LL;
        for (int j = cnt[i] - k + 1; j <= cnt[i]; ++j) {
          t[i][k] = (t[i][k] * (long long)j) % MOD;
        }
      }
    }
  }
}
void solve(int i, int k, int st) {
  if (i > 6) {
    long long p = cnt[st] * 1LL;
    for (int j = 0; j <= n; ++j) {
      if (c[j] == 0) continue;
      if (c[j] > cnt[j]) return;
      p = (p * t[j][c[j]]) % MOD;
    }
    ans = (ans + p) % MOD;
    return;
  }
  for (int j = 0; j < k; ++j) {
    c[j]++;
    solve(i + 1, k - j, st);
    c[j]--;
  }
}
int main() {
  cin >> s;
  n = (int)(s).size();
  memset(dp, 0, sizeof(dp));
  for (int i = 1; i <= 9; ++i) {
    int k;
    if (i == 4 || i == 7)
      k = 1;
    else
      k = 0;
    dp[1][k][0] += (s[0] - '0' > i) ? 1 : 0;
    dp[1][k][1] += (s[0] - '0' == i) ? 1 : 0;
    dp[1][k][2] += (s[0] - '0' < i) ? 1 : 0;
  }
  for (int i = 2; i <= n; ++i) {
    for (int k = 0; k <= i; ++k) {
      dp[i][k][1] = ((s[i - 1] == '4' || s[i - 1] == '7') ? dp[i - 1][k - 1][1]
                                                          : dp[i - 1][k][1]);
      if ((s[i - 1] == '4' || s[i - 1] == '7') && k == 0) dp[i][k][1] = 0;
      for (int j = 0; j < 10; ++j) {
        if (j == 4 || j == 7) {
          if (k != 0) {
            dp[i][k][0] += (dp[i - 1][k - 1][0] +
                            (j < (s[i - 1] - '0') ? dp[i - 1][k - 1][1] : 0));
            dp[i][k][2] += (dp[i - 1][k - 1][2] +
                            (j > (s[i - 1] - '0') ? dp[i - 1][k - 1][1] : 0));
          }
        } else {
          dp[i][k][0] +=
              (dp[i - 1][k][0] + ((j < s[i - 1] - '0') ? dp[i - 1][k][1] : 0));
          dp[i][k][2] +=
              (dp[i - 1][k][2] + ((j > s[i - 1] - '0') ? dp[i - 1][k][1] : 0));
        }
      }
    }
  }
  for (int k = 0; k <= n; ++k) {
    cnt[k] = 0;
    for (int i = 1; i <= n; ++i) {
      cnt[k] += dp[i][k][0] + dp[i][k][1];
      if (i < n) cnt[k] += dp[i][k][2];
    }
  }
  init();
  ans = 0;
  for (int i = 1; i <= n; ++i) {
    solve(1, i, i);
  }
  printf("%I64d", ans);
  return 0;
}
