#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
int n, i, d[11][11][2], dn, j, c[11];
long long ans;
vector<int> v;
long long rec(int x, int l) {
  if (l > 5) return 1;
  long long P = 0;
  for (int i = 0; i < x; ++i) {
    if (!c[i]) continue;
    --c[i];
    P = (P + (c[i] + 1LL) * rec(x - i, l + 1)) % mod;
    ++c[i];
  }
  return P;
}
int main() {
  cin >> n;
  dn = n;
  while (dn) {
    v.push_back(dn % 10);
    dn /= 10;
  }
  for (i = 0; i < v.size() - i - 1; i++) swap(v[i], v[v.size() - i - 1]);
  d[0][0][0] = 1;
  for (i = 0; i < v.size(); ++i)
    for (j = 0; j < v.size(); ++j) {
      for (int l = 0; l <= v[i]; ++l)
        if (l < v[i])
          d[i + 1][j + (l == 4) + (l == 7)][1] += d[i][j][0];
        else
          d[i + 1][j + (l == 4) + (l == 7)][0] += d[i][j][0];
      for (int l = 0; l < 10; ++l)
        d[i + 1][j + (l == 4) + (l == 7)][1] += d[i][j][1];
    }
  for (i = 0; i <= v.size(); i++) {
    c[i] += d[v.size()][i][0];
    c[i] += d[v.size()][i][1];
  }
  --c[0];
  for (i = 1; i <= v.size(); i++) ans = (ans + c[i] * rec(i, 0) % mod) % mod;
  cout << ans << endl;
  return 0;
}
