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: Wrong Answer)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD = 1e9+7,MAX = 1e5;

int dp[10][2][7];
/*
dp[i][j][0]3のみ
dp[i][j][1]5のみ
dp[i][j][2]7のみ
dp[i][j][3]35のみ
dp[i][j][4]37のみ
dp[i][j][5]57のみ
dp[i][j][6]357のみ

*/


int main()
{
	string s,t;
	s="0";
	cin >>t;
	s = t;
	int sn = s.size();
	if(s[0]=='3')
	{
		dp[0][0][0]++;
	}
	if(s[0]=='5')
	{
		dp[0][0][1]++;
	}
	if(s[0]=='7')
	{
		dp[0][0][2]++;
	}
	//cout<<';'<<endl;
	for(int i = 1;i<sn;i++)
	{
		for(int j = 0;j<3;j++)
		{
			dp[i][1][j]++;
		}
	}
	for(char i = '3';i<s[0];i+=2)
	{
		dp[0][1][(i-'3')/2]++;
	}


	for(int i = 0;i<sn-1;i++)
	{
		if(s[i+1]=='3')
		{
			dp[i+1][0][0]+=dp[i][0][0];
			dp[i+1][0][3]+=dp[i][0][3];
			dp[i+1][0][4]+=dp[i][0][4];
			dp[i+1][0][6]+=dp[i][0][6];
			dp[i+1][0][3]+=dp[i][0][1];
			dp[i+1][0][4]+=dp[i][0][2];
			dp[i+1][0][6]+=dp[i][0][5];
		}
		if(s[i+1]=='5')
		{
			dp[i+1][0][1]+=dp[i][0][1];
			dp[i+1][0][3]+=dp[i][0][3];
			dp[i+1][0][5]+=dp[i][0][5];
			dp[i+1][0][6]+=dp[i][0][6];
			dp[i+1][0][3]+=dp[i][0][0];
			dp[i+1][0][5]+=dp[i][0][2];
			dp[i+1][0][6]+=dp[i][0][4];
		}
		if(s[i+1]=='7')
		{
			dp[i+1][0][2]+=dp[i][0][2];
			dp[i+1][0][4]+=dp[i][0][4];
			dp[i+1][0][5]+=dp[i][0][5];
			dp[i+1][0][6]+=dp[i][0][6];
			dp[i+1][0][4]+=dp[i][0][0];
			dp[i+1][0][5]+=dp[i][0][1];
			dp[i+1][0][6]+=dp[i][0][3];
		}
		for(char c='3';c<s[i+1];c+=2)
		{
			if(c=='3')
			{
				dp[i+1][1][0]+=dp[i][0][0];
				dp[i+1][1][3]+=dp[i][0][3];
				dp[i+1][1][4]+=dp[i][0][4];
				dp[i+1][1][6]+=dp[i][0][6];
				dp[i+1][1][3]+=dp[i][0][1];
				dp[i+1][1][4]+=dp[i][0][2];
				dp[i+1][1][6]+=dp[i][0][5];
			}
			if(c=='5')
			{
				dp[i+1][1][1]+=dp[i][0][1];
				//dp[i+1][1][3]+=dp[i][0][3];
				dp[i+1][1][5]+=dp[i][0][5];
				//dp[i+1][1][6]+=dp[i][0][6];
				dp[i+1][1][3]+=dp[i][0][0];
				dp[i+1][1][5]+=dp[i][0][2];
				dp[i+1][1][6]+=dp[i][0][4];
			}
			if(c=='7')
			{
			dp[i+1][1][2]+=dp[i][0][2];
			//dp[i+1][1][4]+=dp[i][0][4];
			//dp[i+1][1][5]+=dp[i][0][5];
			//dp[i+1][1][6]+=dp[i][0][6];
			dp[i+1][1][4]+=dp[i][0][0];
			dp[i+1][1][5]+=dp[i][0][1];
			dp[i+1][1][6]+=dp[i][0][3];
			}
		}
		for(char c = '3';c<='7';c+=2)
		{
			if(c=='3')
			{
				dp[i+1][1][0]+=dp[i][1][0];
				dp[i+1][1][3]+=dp[i][1][3];
				dp[i+1][1][4]+=dp[i][1][4];
				dp[i+1][1][6]+=dp[i][1][6];
				dp[i+1][1][3]+=dp[i][1][1];
				dp[i+1][1][4]+=dp[i][1][2];
				dp[i+1][1][6]+=dp[i][1][5];
			}
			if(c=='5')
			{
				dp[i+1][1][1]+=dp[i][1][1];
				dp[i+1][1][3]+=dp[i][1][3];
				dp[i+1][1][5]+=dp[i][1][5];
				dp[i+1][1][6]+=dp[i][1][6];
				dp[i+1][1][3]+=dp[i][1][0];
				dp[i+1][1][5]+=dp[i][1][2];
				dp[i+1][1][6]+=dp[i][1][4];
			}
			if(c=='7')
			{
				dp[i+1][1][2]+=dp[i][1][2];
				dp[i+1][1][4]+=dp[i][1][4];
				dp[i+1][1][5]+=dp[i][1][5];
				dp[i+1][1][6]+=dp[i][1][6];
				dp[i+1][1][4]+=dp[i][1][0];
				dp[i+1][1][5]+=dp[i][1][1];
				dp[i+1][1][6]+=dp[i][1][3];
			}
			
		}

	}
		//for(int i = 0;i<7;++i)cout<<dp[2][1][i]<<endl;
		cout<<dp[sn-1][0][6]+dp[sn-1][1][6]<<endl;
	return 0;
}