#include <bits/stdc++.h>
using namespace std;
 
int main() {
    int N,i,ans;
    cin >> N;
    ans = 0;

    for (i = 1; i <= N; i++) {
        if (i % 10 == 7 || i / 10 % 10 == 7 || i / 100 % 10 == 7 || i / 1000 % 10 == 7 || i / 10000 % 10 == 7) {
            continue;
        } else if (i % 8 == 7 || i / 8 % 8 == 7 || i / 8 / 8 % 8 == 7 || i / 8 / 8 / 8 % 8 == 7 || i / 8 / 8 / 8 / 8 % 8 == 7 || i / 8 / 8 / 8 / 8 / 8 % 8 == 7) {
            continue;
        }
        ans += 1;
    }

    cout << ans << endl;
}
#include <bits/stdc++.h>

using namespace std;

#define rep(i,n)for(int i=0;i<(int)(n);++i)
#define fixed(n)fixedb<<setprecision(n)
#define ll long long
#define ALL(a)a.begin(),a.end()

template<class T>void chmin(T& a,T b){
    if(a>b){
        a=b;
    }
}

template<class T>void chmax(T& a,T b){
    if(a<b){
        a=b;
    }
}

const long long INF=1LL<<60;
const long long MOD=1000000007;

int main(){
    int n;cin>>n;
    set<int>a;
    int a10=7,a8=7;
    int res=n;
    for(int i=1;i<=n;++i){
        bool flag=true;
        string s=to_string(i);
        rep(j,s.size()){
            if(s[j]=='7'){
                flag=false;
                break;
            }
        }
        if(flag){
            ll m=i;string t;
            while(m>0){
                char push=m%8+48;
                t=push+t;
                if(m/8<=0){
                    push=m+48;
                    t=push+t;
                }
                m/=8;
            }
            rep(j,t.size()){
                if(t[j]=='7'){
                    flag=false;
                    break;
                }
            }
        }
        if(!flag)res--;
    }
    cout<<res;
}