#include <bits/stdc++.h>
using namespace std;
const long long INFL = 1e18;
const int INF = 1001001001;
const int mod = 1000000007;
vector<long long> li;
vector<long long> memo = {3, 5, 7};
void dfs(long long a, long long n) {
  if (a * 10 <= n) {
    for (int(i) = 0; (i) < (3); (i)++) {
      long long x = a * 10 + memo[i];
      li.push_back(x);
      dfs(x, n);
    }
  }
}
int main() {
  long long n;
  cin >> n;
  dfs(0, n);
  for (int i = li.size() - 1; i >= 0; i--) {
    bool f3 = false;
    bool f5 = false;
    bool f7 = false;
    string s = to_string(li[i]);
    for (int(j) = 0; (j) < (s.length()); (j)++) {
      if (s[j] == '3') f3 = true;
      if (s[j] == '5') f5 = true;
      if (s[j] == '7') f7 = true;
    }
    if (!f3 || !f5 || !f7) {
      li.erase(li.begin() + i);
    }
  }
  sort((li).begin(), (li).end());
  int ans = lower_bound((li).begin(), (li).end(), n) - li.begin();
  cout << ans << endl;
}
