#include <bits/stdc++.h>
using namespace std;
long long dp[20][20];
long long res[20];
int bit[20], bn;
int a[20];
long long m, n, pn, ans;
void deep(int now, int _max, int party, long long cur) {
  if (now > _max) return;
  if (party == 7) {
    if (now < _max) {
      ans += cur;
      ans %= 1000000007ll;
    }
    return;
  }
  for (int i = 0; i <= bn; i++) {
    if (res[i]) {
      res[i]--;
      deep(now + i, _max, party + 1, cur * (res[i] + 1) % 1000000007ll);
      res[i]++;
    }
  }
}
long long dfs(long long pos, long long target, long long limit) {
  long long sum = 0;
  if (pos == 0) return target == 0;
  if ((limit == 0) && (dp[pos][target] != -1)) return dp[pos][target];
  long long tail = limit ? bit[pos] : 9;
  for (int i = 0; i <= tail; i++)
    if (i == 4 || i == 7)
      sum += dfs(pos - 1, target - 1, (limit == 1) && (bit[pos] == i));
    else
      sum += dfs(pos - 1, target, (limit == 1) && (bit[pos] == i));
  if (limit == 0) dp[pos][target] = sum;
  return sum;
}
void cal(long long x) {
  ans = bn = 0;
  long long y = x;
  while (y) {
    ++bn;
    bit[bn] = y % 10;
    y /= 10;
  }
  for (int i = 0; i <= bn; i++) res[i] = dfs(bn, i, 1);
  res[0] -= 1;
  for (int i = 1; i <= bn; i++) deep(0, i, 1, res[i]);
}
int main() {
  long long head, rear;
  memset(dp, -1, sizeof dp);
  scanf("%I64d", &head);
  cal(head);
  printf("%I64d\n", ans);
  return 0;
}
