#include <bits/stdc++.h>
using namespace std;
int read() {
  char c;
  int sum = 0, f = 1;
  c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    sum = sum * 10 + c - '0';
    c = getchar();
  }
  return sum * f;
}
int m;
int dight[11], bit;
long long lucky[11], dp[11][11], ans;
long long dfs(int pos, int res, bool p) {
  long long sum = 0;
  if (pos == 0) return res == 0;
  if (!p && dp[pos][res] != -1) return dp[pos][res];
  int limit = p ? dight[pos] : 9;
  for (int i = 0; i <= limit; i++)
    sum += dfs(pos - 1, res - (i == 4 || i == 7), p && (i == dight[pos]));
  if (!p) dp[pos][res] = sum;
  return sum;
}
void DFS(int sum, int maxa, int num, long long cnt) {
  if (sum >= maxa) return;
  if (num == 7) {
    ans = (ans + cnt) % 1000000007;
    return;
  }
  for (int i = 0; i < bit; i++) {
    if (lucky[i]) {
      lucky[i]--;
      DFS(sum + i, maxa, num + 1, cnt * (lucky[i] + 1) % 1000000007);
      lucky[i]++;
    }
  }
}
int main() {
  m = read();
  memset(dp, -1, sizeof(dp));
  while (m) {
    dight[++bit] = m % 10;
    m /= 10;
  }
  for (int i = 0; i <= bit; i++) lucky[i] = dfs(bit, i, 1);
  lucky[0]--;
  for (int i = 1; i <= bit; i++) DFS(0, i, 1, lucky[i]);
  printf("%I64d\n", ans);
  return 0;
}
