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 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int temp[1048576]={};
int x[4]={0,3,5,7};
int tempnum= 0;
void puttotemp(int a){
	temp[tempnum] = a;
	tempnum++;
}
void maketemp(int n){
	int a,b,c,d,e,f,g,h,i,j;
	for(a=0;a<4;a++){
		for(b=0;b<4;b++){
			for(c=0;c<4;c++){
				for(d=0;d<4;d++){
					for(f=0;f<4;f++){
						for(g=0;g<4;g++){
							for(h=0;h<4;h++){
								for(i=0;i<4;i++){
									for(j=0;j<4;j++){
										puttotemp(
											x[a]*(1000000000)+
											x[b]*(100000000)+
											x[c]*(10000000)+
											x[d]*(1000000)+
											x[e]*(100000)+
											x[f]*(10000)+
											x[g]*(1000)+
											x[h]*(100)+
											x[i]*(10)+
											x[j]*(1)
										);
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

int main(void){
	int N;
	scanf("%d",&N);
	int i,j,x;
	int flag,threeflag,fiveflag,sevenflag;
	char s[11];
	snprintf(s,11,"%d",N);//sにはNが入る
	int n = strlen(s);//nにはNの桁数が入る
	int ans = 0;
	maketemp(n);
	for(i=0;i<n*n*n*n;i++){
		if( N >= temp[i]){
		}else{
			continue;
		}
		//sの0行目から753かどうか調べる
		snprintf(s,11,"%d",temp[i]);//
		flag = 0;threeflag=0;fiveflag=0;sevenflag=0;
		for(j=0;j<strlen(s);j++){
			if(s[j]=='7'){
				sevenflag=1;
			}else if(s[j]=='5'){
				fiveflag = 1;
			}else if(s[j]=='3'){
				threeflag= 1;
			}else{
				flag = -1;
			}
		}
		if(flag == 0 && sevenflag==1 && fiveflag ==1 && threeflag ==1){
			ans++;
		}
		
	}
	printf("%d",ans);
	return 0;
}