#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e4;
const int mod = 1e9 + 7;
int M;
int cnt[11];
vector<int> m;
int dn[11][11][2];
long long P(int n, int r) {
  if (r > n) return 0LL;
  long long res = 1;
  for (int i = n; i > n - r; i--) res = (res * i) % mod;
  return res;
}
int f(int n, int L, bool eq) {
  if (L < 0) return 0;
  if (n == m.size() - 1) return L == 0;
  int &res = dn[n][L][eq];
  if (res != -1) return res;
  int e = eq ? m[n + 1] + 1 : 10;
  for (int i = res = 0; i < e; i++)
    res += f(n + 1, L - (i == 4 || i == 7), eq && m[n + 1] == i);
  return res;
}
int main() {
  cin >> M;
  while (M) {
    m.push_back(M % 10);
    M /= 10;
  }
  reverse(m.begin(), m.end());
  m.insert(m.begin(), 0);
  memset(dn, -1, sizeof dn);
  for (int i = 0; i < 10; i++) cnt[i] = f(0, i, 1);
  cnt[0]--;
  long long ans = 0;
  for (int a1 = 0; a1 < 10; a1++)
    for (int a2 = 0; a2 < 10; a2++)
      for (int a3 = 0; a3 < 10; a3++)
        for (int a4 = 0; a4 < 10; a4++)
          for (int a5 = 0; a5 < 10; a5++)
            for (int a6 = 0; a6 < 10; a6++)
              for (int a7 = 0; a7 < 10; a7++) {
                if (a1 <= a2 + a3 + a4 + a5 + a6 + a7) continue;
                static int me[11];
                for (int i = 0; i < 11; i++) me[i] = 0;
                me[a1]++;
                me[a2]++;
                me[a3]++;
                me[a4]++;
                me[a5]++;
                me[a6]++;
                me[a7]++;
                static long long res;
                res = 1LL;
                for (int i = 0; i < 10; i++)
                  res = (res * P(cnt[i], me[i])) % mod;
                ans = (ans + res) % mod;
              }
  cout << ans << endl;
  return 0;
}
