#include <bits/stdc++.h>
using namespace std;
int n, m, p, q;
long long num;
long long dp[20][20];
int bit[20];
long long s[20];
const long long mod = 1000000007LL;
int sum;
int b[20];
long long dfs(int n, int m) {
  long long ret = 0;
  for (int i = 0; i <= n; i++) {
    if (i > n) break;
    if (m == 1)
      ret += s[i];
    else {
      s[i]--;
      ret += (s[i] + 1) * dfs(n - i, m - 1);
      s[i]++;
    }
    ret %= mod;
  }
  return ret;
}
int main() {
  memset(dp, 0, sizeof dp);
  dp[0][0] = 1;
  for (int i = 1; i <= 10; i++)
    for (int j = 0; j <= 9; j++)
      for (int k = 0; k <= i; k++)
        if (j == 4 || j == 7) {
          if (k) dp[i][k] += dp[i - 1][k - 1];
        } else
          dp[i][k] += dp[i - 1][k];
  cin >> num;
  num++;
  int len = 0;
  memset(bit, 0, sizeof bit);
  memset(s, 0, sizeof s);
  while (num) bit[++len] = num % 10, num /= 10;
  int t = 0;
  for (int i = len; i >= 1; i--) {
    for (int j = 0; j < bit[i]; j++)
      for (int k = t; k <= len; k++)
        if (j == 4 || j == 7) {
          if (k - t) s[k] += dp[i - 1][k - t - 1];
        } else
          s[k] += dp[i - 1][k - t];
    if (bit[i] == 4 || bit[i] == 7) t++;
  }
  s[0]--;
  long long ans = 0;
  memset(b, 0, sizeof b);
  for (int i = 1; i <= len; i++)
    if (s[i]) sum = 0, ans += s[i] * dfs(i - 1, 6), ans %= mod;
  cout << ans << endl;
  return 0;
}
