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 (Clang 3.8.0) (judge verdict: Accepted)

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <cassert>
#include <string>
//#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 9, M = 1e7, OO = 0x3f3f3f3f, eps = 0.001;
#define IO() assert(freopen("in.in", "rt", stdin)), assert(freopen("out.out", "wt", stdout))
#define ll long long int
#define FastIO() ios::sync_with_stdio(false), cin.tie(0);
void printar(int arr[], int n)
{
    for (int i = 0; i < n; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
}
// template <typename... T>
// void debug(T &... args)
// {
//     ((cerr << args << " "), ...);
//     cerr << endl;
// }
// struct COMPARE {
//   bool operator()(pair<string,ll> const& P1, pair<string,ll> const& P2)
//     {

//         return P1.first < P2.second;
//     }
// };
// priority_queue<pair<string,ll>,vector<pair<string,ll>>,COMPARE >pq;
ll cnt = 0, n;
void g(ll org, ll a, ll b, ll c){
    if(org <= n){

        if(a && b && c) cnt++;

        g( org * 10 + 7 , a + 1, b, c);
        g( org * 10 + 5 , a, b + 1, c);
        g( org * 10 + 3 , a, b, c + 1);
    }
}

int main()
{
    // icpctraining
    // IO();
    FastIO();
    cin >> n;
    g(0, 0, 0, 0);
    cout << cnt << endl;    
    return 0;
}