#include <bits/stdc++.h>
using namespace std;
const int B = 1e9 + 7;
long long n, m, c[11][11], f[11], a[11], cnt, ans;
void dfs(long long d, long long x, long long s) {
  if (d > 5) {
    ans = (ans + s) % B;
    return;
  }
  for (int i = 0; i < x; ++i) {
    f[i]--;
    dfs(d + 1, x - i, s * (f[i] + 1) % B);
    f[i]++;
  }
}
int main() {
  scanf("%I64d", &m);
  m++;
  f[0]--;
  while (m) {
    a[++n] = m % 10, m /= 10;
  }
  for (int i = 0; i < 11; ++i) {
    for (int j = 0; j <= i; ++j) {
      c[i][j] = i && j ? (c[i - 1][j] + c[i - 1][j - 1]) % B : 1;
    }
  }
  for (int i = n; i; --i) {
    for (int j = 0; j < a[i]; ++j) {
      long long now = 1LL << i - 1;
      for (int k = i - 1; k >= 0; --k) {
        f[cnt + (j == 4 || j == 7) + k] += now * c[i - 1][k], now <<= 2;
      }
    }
    cnt += (a[i] == 4 || a[i] == 7);
  }
  for (int i = 1; i <= n; ++i) {
    if (f[i]) {
      f[i]--;
      dfs(0, i, f[i] + 1);
      f[i]++;
    }
  }
  printf("%I64d\n", ans);
  return 0;
}
