#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 7;
int dp[15][15][2], len, sum[15];
bool mark[15][2];
char as[15];
void dfs(int x, bool ok) {
  if (mark[x][ok]) return;
  if (x == len + 1) {
    dp[x][0][ok] = 1;
    return;
  }
  mark[x][ok] = 1;
  if (ok) {
    for (int w(0); w <= as[x] - 48 - 1; ++w) {
      dfs(x + 1, 0);
      if (w == 4 || w == 7)
        for (int q(0); q <= len; ++q) dp[x][q + 1][ok] += dp[x + 1][q][0];
      else
        for (int q(0); q <= len; ++q) dp[x][q][ok] += dp[x + 1][q][0];
    }
    dfs(x + 1, 1);
    if (as[x] - 48 == 4 || as[x] - 48 == 7)
      for (int q(0); q <= len; ++q) dp[x][q + 1][ok] += dp[x + 1][q][1];
    else
      for (int q(0); q <= len; ++q) dp[x][q][ok] += dp[x + 1][q][1];
  } else {
    for (int w(0); w <= 9; ++w) {
      dfs(x + 1, 0);
      if (w == 4 || w == 7)
        for (int q(0); q <= len; ++q) dp[x][q + 1][ok] += dp[x + 1][q][0];
      else
        for (int q(0); q <= len; ++q) dp[x][q][ok] += dp[x + 1][q][0];
    }
  }
}
long long ans = 0;
void redfs(int x, int y, long long mu) {
  if (x == 7) {
    for (int q(y + 1); q <= len; ++q) ans += mu * sum[q] % INF;
    ans %= INF;
  } else {
    for (int q(0); q <= len - y - 1; ++q)
      if (sum[q]) {
        --sum[q];
        redfs(x + 1, y + q, mu * (sum[q] + 1) % INF);
        ++sum[q];
      }
  }
}
int main() {
  scanf("%s", as + 1);
  len = strlen(as + 1);
  dfs(1, 1);
  for (int q(0); q <= len; ++q) sum[q] = dp[1][q][1];
  --sum[0];
  redfs(1, 0, 1);
  cout << ans << endl;
  return 0;
}
