#include <bits/stdc++.h>
using namespace std;
bool debug = false;
int n, m, k;
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
long long ln, lk, lm;
int b[11], cnt;
void init(int x) {
  while (x) {
    b[cnt] = x % 10;
    x /= 10;
    cnt++;
  }
}
vector<int> dfs(int x, bool ok) {
  vector<int> a;
  a.resize(10, 0);
  if (x == 0) {
    for (int c = 0; c <= 9; c++)
      if (ok || c <= b[x]) {
        if (c == 4 || c == 7)
          a[1]++;
        else
          a[0]++;
      }
    return a;
  }
  auto y1 = dfs(x - 1, 1);
  auto y2 = dfs(x - 1, 0);
  for (int c = 0; c <= 9; c++)
    if (ok || c <= b[x]) {
      int tar = (c == 4 || c == 7);
      auto y = (ok || c < b[x]) ? y1 : y2;
      for (int(i) = 0; (i) < (int)(10); (i)++) {
        a[i + tar] += y[i];
      }
    }
  return a;
}
int tt, mm[11];
long long ans = 0;
vector<int> sz;
void cal(int pos, int sum) {
  if (pos == 7) {
    auto tmp = sz;
    long long p = 1;
    for (int i = 1; i <= 6; i++) {
      int num = mm[i];
      if (tmp[num] <= 0) return;
      p = (p * tmp[num]) % 1000000007;
      tmp[num]--;
    }
    ans = (ans + p) % 1000000007;
    return;
  }
  for (int i = 0; i + sum < tt; i++) {
    mm[pos] = i;
    cal(pos + 1, i + sum);
  }
}
int main() {
  scanf("%d", &m);
  init(m);
  sz = dfs(cnt - 1, 0);
  sz[0]--;
  long long aa = 0;
  for (tt = 1; tt <= 9; tt++)
    if (sz[tt]) {
      ans = 0;
      cal(1, 0);
      ans = (ans * sz[tt]) % 1000000007;
      aa = (aa + ans) % 1000000007;
    }
  printf("%lld\n", aa);
  return 0;
}
