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# (Mono 4.6.2.0) (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp90 {
    class Program {
        static void Main(string[] args) {
            int N = int.Parse(Console.ReadLine());
            int keta = (int)Math.Floor(Math.Log10(N)) + 1;

            string output = "";
            int remain;

            var outPutList = new List<string>();

            for (int k = keta; k >= 1; k--) {
                for (int i = 0; i < (int)Math.Pow(3, k); i++) {
                    output = "";
                    int temp = i;

                    for (int pos = 0; pos < k; pos++) {
                        remain = temp % 3;
                        output = remain.ToString() + output;
                        temp /= 3;
                    }
                    outPutList.Add(output);
                }
            }

            //0, 1, 2の集合
            var neededList = new List<char> { '0', '1', '2' };

            //3, 5, 7の集合
            var list_357 = new List<char> { '3', '5', '7' };

            int ans = 0;

            for (int i = 0; i < outPutList.Count(); i++) {
                //3種類の文字がそろっていない場合は飛ばす
                if (outPutList[i].ToCharArray().ToList().Intersect(neededList).Count() != 3) {
                    continue;
                }

                //文字列から整数を生成
                string num_str = "";
                for (int j = 0; j < outPutList[i].Length; j++) {
                    num_str += list_357[int.Parse(outPutList[i][j].ToString())].ToString();
                }

                int num = int.Parse(num_str);

                if (num <= N) {
                    ans++;
                }
            }
            Console.WriteLine(ans);
        }
    }
}