#include <bits/stdc++.h>
typedef struct aaaaa {
  int x, y, t;
} Grid;
using namespace std;
long long hoge(long long h) {
  long long ret = 1;
  for (int i = 0; i < h; i++) ret *= 3;
  for (int i = 0; i < h; i++) {
    ret *= (4 - i) / (i + 1);
  }
  return ret;
}
int main() {
  long long n;
  cin >> n;
  long long nn = n;
  int keta = 0;
  while (n > 0) {
    keta++;
    n /= 10;
  }
  long long ans = 0;
  long long kazu[1000] = {};
  for (int i = 3; i < keta; i++) {
    kazu[i] = 6 * hoge(i - 3);
  }
  vector<int> hh;
  long long hhh = nn;
  while (nn > 0) {
    hh.push_back(nn % 10);
    nn /= 10;
  }
  for (int i = 0; i < keta; i++) ans += kazu[i];
  bool flag = true;
  int hog[10] = {0, 0, 0, 1, 0, 1, 0, 1, 0, 0};
  long long ini = 1;
  long long kake = 1;
  for (int i = 0; i < keta; i++) {
    ini += kake * 3;
    kake *= 10;
  }
  ini += 23;
  for (long long i = ini; i <= hhh;) {
    if (hog[3] > 0 & hog[5] > 0 & hog[7] > 0) {
      ans++;
    }
    if (i % 10 != 7) {
      hog[i % 10]--;
      i += 2;
      hog[i % 10]++;
    } else {
      long long num = i;
      num /= 10;
      hog[num % 10]--;
      num++;
      i += 6;
      hog[7]--;
      hog[3]++;
      long long kake = 10;
      while (num > 0) {
        long long nnn = (num) % 10;
        if (nnn <= 3) {
          i += kake * (3 - nnn);
          hog[3]++;
          break;
        } else if (nnn <= 5) {
          i += kake * (5 - nnn);
          hog[5]++;
          break;
        } else if (nnn <= 7) {
          i += kake * (7 - nnn);
          hog[7]++;
          break;
        } else {
          i += (13 - nnn) * kake;
          num /= 10;
          hog[num]--;
          num++;
          hog[3]++;
        }
        kake *= 10;
      }
    }
  }
  cout << ans << endl;
  return 0;
}
