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 eval(x)
  v = 0
  has3 = has5 = has7 = false
  for i in 0...x.size
    t = x[i]
    if t == 3
      has3 = true
    elsif t == 5
      has5 = true
    elsif t == 7
      has7 = true
    end
    v += t * (10**i)
  end
  return ((v <= $n && has3 && has5 && has7) ? 1 : 0)
end

$n = gets.to_i
a = [0,3,5,7]
r = 0
for d0 in a
  next if d0 == 0
  for d1 in a
    next if d1 == 0
    for d2 in a
      next if d2 == 0
      for d3 in a
        if d3 == 0
          r += eval([d0,d1,d2])
        else
          for d4 in a
            if d4 == 0
              r += eval([d0,d1,d2,d3])
            else
              for d5 in a
                if d5 == 0
                  r += eval([d0,d1,d2,d3,d4])
                else
                  for d6 in a
                    if d6 == 0
                      r += eval([d0,d1,d2,d3,d4,d5])
                    else
                      for d7 in a
                        if d7 == 0
                          r += eval([d0,d1,d2,d3,d4,d5,d6])
                        else
                          for d8 in a
                            if d8 == 0
                              r += eval([d0,d1,d2,d3,d4,d5,d6,d7])
                            else
                              r += eval([d0,d1,d2,d3,d4,d5,d6,d7,d8])
                            end
                          end
                        end
                      end
                    end
                  end
                end
              end
            end
          end
        end
      end
    end
  end
end
print r