#include <bits/stdc++.h>
using namespace std;
int num[10];
long long dp[12][2][11];
void solve(int n, int tight) {
  if (n == 0) {
    for (int i = 0; i < 11; i++) {
      dp[n][tight][i] = 0;
    }
    dp[n][tight][0] = 1;
    return;
  }
  int lim = 10;
  if (tight) {
    lim = num[n - 1];
  }
  if (dp[n][tight][0] != -1) return;
  for (int i = 0; i < 11; i++) dp[n][tight][i] = 0;
  for (int i = 0; i < lim; i++) {
    solve(n - 1, 0);
    if (i != 4 && i != 7) {
      for (int j = 0; j < 11; j++) {
        dp[n][tight][j] += dp[n - 1][0][j];
      }
    } else {
      for (int j = 1; j < 11; j++) {
        dp[n][tight][j] += dp[n - 1][0][j - 1];
      }
    }
  }
  if (lim != 10) {
    solve(n - 1, tight);
    if (lim == 4 || lim == 7) {
      for (int j = 1; j < 11; j++) {
        dp[n][tight][j] += dp[n - 1][1][j - 1];
      }
    } else {
      for (int j = 0; j < 11; j++) {
        dp[n][tight][j] += dp[n - 1][1][j];
      }
    }
  }
}
long long nPr(long long n, int r) {
  long long ans = 1;
  for (int i = 0; i < r; i++) {
    long long temp = n - i;
    ans = ans * temp;
    if (ans >= 1000000007) ans = ans % 1000000007;
  }
  return ans;
}
long long nCr(long long n, int r) {
  long long ans = 1;
  for (int i = 1; i <= n; i++) {
    ans = ans * i;
  }
  for (int i = 1; i <= r; i++) {
    ans = ans / i;
  }
  for (int i = 1; i <= n - r; i++) {
    ans = ans / i;
  }
  return ans;
}
long long calc2(int n, int val, int spots) {
  long long ans = 0;
  if (spots == 0 && val > 0) return 1;
  if (spots <= 0) return 0;
  if (val <= 0) return 0;
  if (n == 0) {
    ans = nPr(dp[11][1][0], spots);
    return ans;
  }
  for (int i = 0; i <= 6; i++) {
    long long temp =
        nPr(dp[11][1][n], i) * calc2(n - 1, val - n * i, spots - i);
    temp = temp % 1000000007;
    temp = temp * nCr(spots, i);
    temp = temp % 1000000007;
    ans = ans + temp;
    ans = ans % 1000000007;
  }
  return ans;
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < 10; i++) {
    num[i] = n % 10;
    n = n / 10;
  }
  for (int i = 0; i < 12; i++) {
    for (int j = 0; j < 2; j++) {
      for (int k = 0; k < 11; k++) {
        dp[i][j][k] = -1;
      }
    }
  }
  solve(11, 1);
  long long sum = 0;
  long long ans = 0;
  dp[11][1][0]--;
  for (int i = 1; i < 11; i++) {
    long long temp = (dp[11][1][i] * calc2(i - 1, i, 6)) % 1000000007;
    ans = ans + temp;
    ans = ans % 1000000007;
  }
  cout << ans << endl;
}
