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 Go (1.6) (judge verdict: Accepted)

package main

import (
	"fmt"
	"strconv"
)

//一部改良したけどマルパクリすんません
var n int
var numOf753 = [3]int{3, 5, 7}
var count = 0

func dfs(v int) {
	if isContains(v, 3) && isContains(v, 5) && isContains(v, 7) {
		count++
	}
	for _, next := range numOf753 {
		tmp := v*10 + next
		//if v is equal to over n, break.
		if tmp > n {
			continue
		}
		dfs(tmp)
	}
}

// firstofall,loop {3,5,7}
// if 3, then do loop 3o. o is {3,5,7}
// so every time change a number, the number has a loop of list{3,5,7}
func main() {
	fmt.Scan(&n)
	for _, v := range numOf753 {
		dfs(v)
	}
	fmt.Println(count)
}

func isContains(n, d int) bool {
	s := strconv.Itoa(n)
	flg := false
	for i := 0; i < len(s); i++ {
		c, _ := strconv.Atoi(string(s[i]))
		if c == d {
			flg = true
		}
	}
	return flg
}