#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 100, OO = 1e18, M = 1e9 + 7, M2 = 998244353, sq = 350,
                lg = 23;
long long cnt[100], ans;
long long n, t = 0;
void upd(long long x, long long y, long long z) {
  if (x == 0) {
    cnt[y] += z;
    return;
  }
  upd(x - 1, y + 1, z * 2), upd(x - 1, y, z * 8);
  return;
}
void dfs(long long x, long long y, long long c) {
  c %= M;
  if (y > 9) return;
  if (x == 6)
    for (long long i = y + 1; i < 11; i++) {
      ans = (ans + c * cnt[i] % M) % M;
      ans %= M;
    }
  else {
    for (long long i = 0; i < 11; i++) {
      if (!cnt[i]) continue;
      cnt[i]--;
      dfs(x + 1, y + i, (c * (cnt[i] + 1)) % M);
      cnt[i]++;
    }
  }
}
int32_t main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  string s;
  cin >> s;
  n = s.size();
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < s[i] - '0'; j++)
      upd(n - i - 1, t + (j == 4 || j == 7), 1);
    t += (s[i] == '4' || s[i] == '7');
  }
  ++cnt[t], --cnt[0];
  dfs(0, 0, 1);
  cout << ans << endl;
  return 0;
}
