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: Time Limit Exceeded)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#define MAX(X, Y) (((X) > (Y))? (X) : (Y))
#define MIN(X, Y) (((X) < (Y))? (X) : (Y))
int compare_int(const void *a, const void *b){
  return *(long int*)b - *(long int*)a; // 大きい順
}
int compare_int_small(const void *a, const void *b){
  return *(long int*)a - *(long int*)b; // 小さい順
}
// 公約数
long long int gcd(long long int a, long long int b){
  if(b == 0){
    return a;
  }else{
    return gcd(b, a % b);
  }
}
// 最小公倍数 = a * b / 最大公約数
// 公倍数
long long int lcm(long long int a, long long int b){
  return a * b / gcd(a, b);
}

// 5min
int main(void){
  long int n;
  int ans = 0;
  int cnt3 = 0;
  int cnt5 = 0;
  int cnt7 = 0;
  int other = 0;

  scanf("%ld", &n);

  for(long int i = 357; i <= n; i++){
    long int tmp = i; 
    while(tmp > 9){
      //      printf("i = %ld tmp = %ld\n", i, tmp);
      if(tmp % 10 == 3){
	cnt3++;
      }else if(tmp % 10 == 5){
	cnt5++;
      }else if(tmp % 10 == 7){
	cnt7++;
      }else{
	other++;
	break;
      }
      tmp = tmp / 10;
    }
    
    if(tmp == 3){
      cnt3++;
    }else if(tmp == 5){
      cnt5++;
    }else if(tmp == 7){
      cnt7++;
    }else{
      other++;;
    }
    if(cnt3 > 0 && cnt5 > 0 && cnt7 > 0 && other == 0){
      ans++;
    }
    //    printf("i = %ld cnt3:%d cnt5:%d cnt7:%d other:%d\n", i, cnt3, cnt5, cnt7, other);
    cnt3 = 0;
    cnt5 = 0;
    cnt7 = 0;
    other = 0;
  }

  printf("%d\n", ans);
  return 0;
}