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 Java8 (OpenJDK 1.8.0) (judge verdict: Accepted)

import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Scanner;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
*/public class Main {
	public static void main(String[] args) {
		InputStream inputStream = System.in;
		OutputStream outputStream = System.out;
		Scanner in = new Scanner(inputStream);
		PrintWriter out = new PrintWriter(outputStream);
		TaskC solver = new TaskC();
		solver.solve(1, in, out);
		out.close();
	}
static class TaskC   {
int N;

public void solve(int testNumber, Scanner in, PrintWriter out) {
        N = in.nextInt();
        out.println(dfs(0,0,false,false,false));
    }

int dfs(int n, int keta, boolean o3, boolean o5, boolean o7) {
        int temp = 0;
        int ret = 0;
        if(keta == 9){
            if(o3 && o5 && o7 && n<=N && n!=0){
                return 1;
            }
            return 0;
        }
        if(n == 0){
            ret += dfs(n, keta+1, o3, o5, o7);
        }
        ret += dfs(n*10 + 3, keta+1, true, o5, o7);
        ret += dfs(n*10 + 5, keta+1, o3, true, o7);
        ret += dfs(n*10 + 7, keta+1, o3, o5, true);
        return ret;
    }

}
}