//hinagata.cpp
/*includes*/
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <cmath>
#include <stdio.h>
#include <numeric>
#include <iomanip>
#include <limits>
/*namespace*/
using namespace std;
using lint=long long;
/*define macro*/
#define REP(i,n) for(int i=0;i<(n);i++)
#define REPi(i,a,b) for(int i=(a);i<(b);i++)
#define REPRi(i,a,b) for(int i=(a);i>(b);i--)
#define ALL(x) (x).begin(),(x).end()
int N;
#define RADIX 2;//0-index;

int shichi(vector<int> &A,int dizit){
    int rad=RADIX;
    vector<int> trinary(dizit);
    REP(i,pow(3,dizit)){
        int K=0;
        REP(i,dizit){
            if(trinary[i]==0){
                K+=3*pow(10,i);
            }else if(trinary[i]==1){
                K+=5*pow(10,i);
            }else{
                K+=7*pow(10,i);
            }
        }
        A.push_back(K);
        int carry=1;
        REPRi(i,dizit-1,-1){
            if(carry==1&&trinary[i]<rad){
                trinary[i]+=1;
                carry=0;
            }else if(carry==1&&trinary[i]==rad){
                trinary[i]=0;
            }
        }
        if(carry==1){
            break;
        }
    }
    return 0;
}


int main(){
    int N;
    cin>>N;
    vector<int> A;
    REPi(i,3,10){
        shichi(A,i);
    }
    int ans;
    REP(i,A.size()){
        string S=to_string(A[i]);
        if(S.find('7')!=SIZE_T_MAX&&S.find('5')!=SIZE_T_MAX&&S.find('3')!=SIZE_T_MAX){
            if(N>=A[i]){
                ans+=1;
            }
        }
    }
    cout<<ans<<endl;
}