#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
long long m, f[11][11], g[11], use[11], ans, t[2][11], M[13], len;
long long find(int pos, int lkyNum, int lkyLim) {
  long long ret = 0;
  if (pos == 6) return 1;
  for (int i = 0; i <= lkyLim - lkyNum; ++i) {
    if (use[i] == 0) continue;
    use[i]--;
    ret += (use[i] + 1) * find(pos + 1, lkyNum + i, lkyLim) % mod;
    use[i]++;
  }
  return ret;
}
int main() {
  f[0][0] = 1;
  for (int i = 1; i <= 10; ++i)
    for (int j = 0; j <= 10; ++j)
      f[i][j] = (f[i - 1][j - 1] * 2 + f[i - 1][j] * 8) % mod;
  cin >> m;
  while (m > 0) {
    M[len++] = m % 10;
    m /= 10;
  }
  t[1][0] = 1;
  for (int i = 1; i <= 9; ++i) {
    t[0][i] = t[0][i - 1];
    t[1][i] = t[1][i - 1];
    if (i == 4 || i == 7)
      t[0][i]++;
    else
      t[1][i]++;
  }
  for (int pos = 0; pos <= 10; ++pos) {
    int now = 0;
    for (int i = len - 1; i >= 0; --i) {
      int p = M[i] - 1;
      if (now < pos) g[pos] = g[pos] + (t[0][p] * f[i][pos - now - 1] % mod);
      g[pos] = g[pos] + (t[1][p] * f[i][pos - now] % mod);
      if (M[i] == 4 || M[i] == 7) now++;
      if (now > pos) break;
    }
    if (now == pos) g[pos]++;
    if (pos == 0) g[pos]--;
  }
  for (int i = 1; i <= len; ++i) {
    for (int j = 0; j <= 10; ++j) use[j] = g[j];
    if (use[i] == 0) continue;
    use[i]--;
    ans = ans + (g[i] * find(0, 0, i - 1) % mod);
  }
  cout << ans % mod << endl;
  return 0;
}
