#include <bits/stdc++.h>
using namespace std;
long long mod = 1e9 + 7;
int m, dp[2][20][10], cnt[10], tmp, a[20], tot;
long long dfs(int lim, int x, int num) {
  if (dp[lim][x][num] != -1) return dp[lim][x][num];
  if (!x) {
    return dp[lim][x][num] = (num == tmp);
  }
  int d;
  if (lim)
    d = a[x];
  else
    d = 9;
  dp[lim][x][num] = 0;
  for (int i = 0; i <= d; ++i) {
    int nd;
    if (i == d)
      nd = lim;
    else
      nd = 0;
    dp[lim][x][num] += dfs(nd, x - 1, num + (i == 4 || i == 7));
  }
  return dp[lim][x][num];
}
long long cal(int x, int now) {
  if (now > 7) return 1;
  long long res = 0;
  for (int i = 0; i < x; ++i) {
    if (!cnt[i]) continue;
    cnt[i]--;
    res = (res + cal(x - i, now + 1) * (cnt[i] + 1) % mod) % mod;
    cnt[i]++;
  }
  return res;
}
int main() {
  scanf("%d", &m);
  int x = m;
  while (x) a[++tot] = x % 10, x /= 10;
  for (int i = 1; i <= 9; ++i) {
    tmp = i;
    memset(dp, -1, sizeof dp);
    cnt[i] = dfs(1, tot, 0);
    cnt[0] += cnt[i];
  }
  cnt[0] = m - cnt[0];
  long long ans = 0;
  for (int i = 1; i <= 9; ++i) {
    ans = (ans + cnt[i] * cal(i, 2) % mod) % mod;
  }
  printf("%lld", ans);
  return 0;
}
