Problem:
Score : 300 points

Problem Statement

You are given an integer N. Among the integers between 1 and N (inclusive), how many Shichi-Go-San numbers (literally "Seven-Five-Three numbers") are there?

Here, a Shichi-Go-San number is a positive integer that satisfies the following condition:

When the number is written in base ten, each of the digits 7, 5 and 3 appears at least once, and the other digits never appear.

Constraints

1 \leq N < 10^9

N is an integer.

Input

Input is given from Standard Input in the following format:

N

Output

Print the number of the Shichi-Go-San numbers between 1 and N (inclusive).

Sample Input 1

575

Sample Output 1

4

There are four Shichi-Go-San numbers not greater than 575: 357, 375, 537 and 573.

Sample Input 2

3600

Sample Output 2

13

There are 13 Shichi-Go-San numbers not greater than 3600: the above four numbers, 735, 753, 3357, 3375, 3537, 3557, 3573, 3575 and 3577.

Sample Input 3

999999999

Sample Output 3

26484

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin >> n;

    set<int> num;
    for(int i=1; i<=7; i++){
        for(int j=1; j<=7; j++){
            for(int k=1; k<=7; k++){
                int d = i + j + k;
                if(d <= 9){
                    vector<int> v;
                    for(int a=0; a<i; a++) v.push_back(3);
                    for(int b=0; b<j; b++) v.push_back(5);
                    for(int c=0; c<k; c++) v.push_back(7);

                    //for(auto e : v) cout << e;
                    //cout << endl;
                    
                    do{
                        int test = 0;
                        int l = d;
                        int p = 1;
                        while(l > 0){
                            //cout << test << endl;
                            test += v[l-1] * p;
                            l -= 1;
                            p *= 10;
                        }
                        num.insert(test);
                    }while(next_permutation(v.begin(),v.end()));
                }
            }
        }
    }
    vector<int> sgs;
    for(auto x : num){
        //if(x <= 10000) cout << x << endl;
        sgs.push_back(x);
    }

    cout << upper_bound(sgs.begin(),sgs.end(),n) - sgs.begin() << endl;
    return 0;
}