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 Ruby (2.3.3) (judge verdict: Accepted)

def combi(n, m)
  return 1 if m == 0
  return n if m == 1
  return combi(n, n - m) if m > n - m
  fact_s(n, n - m + 1) / fact_s(m, 1)
end
def fact_s(n, m)
  (m..n).to_a.inject(&:*)
end

N = gets.chomp

def count_under(k, n)
  cnt = 0
  (1...(3**k)).each{|i|
    wk = i.to_s(3)
    wk = '0' * (k-wk.size) + wk
    next if (/0+/ =~ wk).nil?
    next if (/1+/ =~ wk).nil?
    next if (/2+/ =~ wk).nil?
    wk = wk.gsub(/0/, '3').gsub(/1/, '5').gsub(/2/, '7')
    break if wk > n
    cnt += 1
  }
  cnt
end

def calc(k)
  ret = 0
  d = Hash.new
  (1..k-2).each{|i|
    (1..k-i-1).each{|j|
      tmp = [i, j, k-i-j].sort
      d[tmp] = combi(k, i) * combi(k-i, j) if not d.key?(tmp)
      ret += d[tmp]
    }
  }
  ret
end

ans = 0
(3..N.size-1).each{|k|
  ans += calc(k)
}
if not (/[8-9]/ =~ N[0]).nil? then
  ans += calc(N.size)
elsif not (/[3-7]/ =~ N[0]).nil? then
  ans += count_under(N.size, N)
end

puts ans