#include <bits/stdc++.h>
using namespace std;
const int P = 1e9 + 7;
int dp[13][13];
int a[10], num[13], K;
long long ans;
int dfs(int k, int status, bool ismax) {
  if (k == 0) return status == K;
  if (~dp[k][status] && !ismax) return dp[k][status];
  int maxer = ismax ? num[k] : 9, res = 0;
  for (int i = (0), iEND = (maxer); i <= (maxer); ++i)
    res += dfs(k - 1, status + (i == 4 || i == 7), ismax && i == maxer);
  if (!ismax) dp[k][status] = res;
  return res;
}
int solve(int k) {
  int n = 0;
  while (k) {
    num[++n] = k % 10;
    k /= 10;
  }
  return dfs(n, 0, 1);
}
void exhau(int k, int sum, long long prod) {
  if (k > 7)
    (ans += prod) %= P;
  else if (k > 1) {
    for (int i = (0), iEND = (9); i <= (9); ++i)
      if (a[i] > 0 && sum > i) {
        exhau(k + 1, sum - i, prod * (a[i]--) % P);
        a[i]++;
      }
  } else {
    for (int i = (0), iEND = (9); i <= (9); ++i)
      if (a[i] > 0) {
        exhau(k + 1, i, (a[i]--));
        a[i]++;
      }
  }
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = (0), iEND = (9); i <= (9); ++i) {
    memset(dp, -1, sizeof(dp));
    a[K = i] = solve(n);
  }
  a[0]--;
  exhau(1, 0, 0);
  printf("%lld\n", ans);
  return 0;
}
