#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
int M, l, A[15], mrk, Mrk[15][15][2];
long long DP[15][15][2], Cnt[15], Ans, cnt[15];
int dp(int len, int last, bool maxn) {
  if (last < 0) return 0;
  if (!len) return !last;
  if (Mrk[len][last][maxn] == mrk + 1) return DP[len][last][maxn];
  Mrk[len][last][maxn] = mrk + 1;
  DP[len][last][maxn] = 0;
  int maxx = maxn ? A[len] : 9;
  for (int i = 0; i <= maxx; i++)
    DP[len][last][maxn] =
        (DP[len][last][maxn] +
         dp(len - 1, last - (i == 4 || i == 7), maxn && i == maxx)) %
        mod;
  return DP[len][last][maxn];
}
void dfs(int n, int last, int h) {
  if (n == 0) {
    if (last) return;
    long long zj1 = 1, zj2 = 0;
    for (int i = 0; i < l; i++)
      for (int j = 0; j < cnt[i]; j++) zj1 = zj1 * (Cnt[i] - j) % mod;
    for (int i = h + 1; i <= l; i++) zj2 = (zj2 + Cnt[i]) % mod;
    Ans = (Ans + zj1 * zj2 % mod) % mod;
    return;
  }
  for (int i = 0; i <= last; i++) {
    cnt[i]++;
    dfs(n - 1, last - i, h);
    cnt[i]--;
  }
}
int main() {
  scanf("%d", &M);
  while (M) {
    A[++l] = M % 10;
    M /= 10;
  }
  for (; mrk <= l; mrk++) Cnt[mrk] += dp(l, mrk, true);
  Cnt[0]--;
  for (int i = 0; i < l; i++) dfs(6, i, i);
  printf("%lld", Ans);
  return 0;
}
