#include <bits/stdc++.h>
using namespace std;
long long n, m;
long long ln[20];
vector<long long> s;
long long dp[20][2][20], ans;
long long go(long long pos, long long ch, long long len) {
  if (pos == n) return (len == 0);
  long long &ret = dp[pos][ch][len];
  if (ret != -1) return ret;
  ret = 0;
  int mx = s[pos];
  if (ch) mx = 9;
  for (int i = 0; i <= mx; i++) {
    ret += go(pos + 1, ch || (i < mx), len - (i == 4 || i == 7));
  }
  return ret;
}
long long mxl;
void chk(long long nw, long long pt, long long val) {
  if (nw > mxl) return;
  if (pt == 1) {
    if (nw < mxl) ans = (ans + val) % 1000000007LL;
    return;
  }
  for (long long i = 0; i < n; i++) {
    if (ln[i]) {
      ln[i]--;
      chk(nw + i, pt - 1, (val * (ln[i] + 1)) % 1000000007LL);
      ln[i]++;
    }
  }
}
int main() {
  cin >> m;
  while (m) {
    s.push_back(m % 10);
    m /= 10;
  }
  reverse(s.begin(), s.end());
  n = s.size();
  for (long long i = 0; i <= n; i++) {
    memset(dp, -1, sizeof(dp));
    ln[i] = go(0, 0, i);
  }
  ln[0]--;
  for (long long i = 1; i <= n; i++) {
    mxl = i;
    chk(0, 7, ln[i]);
  }
  cout << (ans + 1000000007LL) % 1000000007LL << endl;
  return 0;
}
