#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
int n;
long long a[15], cnt;
long long p[15], f[15];
long long x[23];
long long dp[23][23][23];
long long dfs(int pos, int limit, int sum, int p) {
  if (pos == 0) {
    if (sum == p)
      return 1;
    else
      return 0;
  }
  if (!limit && ~dp[pos][sum][p]) return dp[pos][sum][p];
  long long ans = 0;
  int res = limit ? x[pos] : 9;
  for (int i = 0; i <= res; ++i) {
    ans += dfs(pos - 1, limit && (i == res), sum + (i == 4 || i == 7), p);
  }
  if (!limit) dp[pos][sum][p] = ans;
  return ans;
}
void solve(int a) {
  while (a) {
    x[++cnt] = a % 10;
    a /= 10;
  }
  p[0] = n;
  for (int i = 1; i <= 9; ++i) {
    p[i] = dfs(cnt, 1, 0, i);
    p[0] -= p[i];
  }
}
long long search(int x, int pos) {
  if (pos == 7) return 1;
  long long ans = 0;
  for (int i = 0; i < x; ++i) {
    if (p[i]) {
      --p[i];
      ans += (p[i] + 1) * search(x - i, pos + 1) % mod;
      ans %= mod;
      ++p[i];
    }
  }
  return ans % mod;
}
int main() {
  memset(dp, -1, sizeof(dp));
  scanf("%d", &n);
  solve(n);
  long long ans = 0;
  for (int i = 1; i <= 9; ++i) {
    if (p[i] == 0) continue;
    long long res = search(i, 1);
    ans += p[i] * res % mod;
    ans %= mod;
  }
  printf("%lld\n", ans);
  return 0;
}
