from collections import deque

X = int(eval(input()))

# その時の数字と、3,5,7が今までに含まれていたか

q = deque([""])

q_is3 = deque([0])

q_is5 = deque([0])

q_is7 = deque([0])

N = "357"

ans = 0

while q:

    num = q.popleft()

    is3 = q_is3.popleft()

    is5 = q_is5.popleft()

    is7 = q_is7.popleft()

    for n in N:

        next_v = num + n

        if int(next_v) > X: continue

        else:

            next_is3 = is3 or n == "3"

            next_is5 = is5 or n == "5"

            next_is7 = is7 or n == "7"

            q.append(next_v)

            q_is3.append(next_is3)

            q_is5.append(next_is5)

            q_is7.append(next_is7)

            if next_is3 and next_is5 and next_is7:

                ans += 1

print(ans)

"""

753の数

"""



import sys

sys.setrecursionlimit(100000)

N = int(eval(input()))

# seen = [False] * N

"""

1. Gを予め作って探索するパターン

2. Gを作りながら探索するパターン

"""

cnt = 0

def dfs(v):

    global cnt

    # vを訪問済みにする

    # seen[v] = True

    num = "753"

    #グラフ中の次のVについて

    for n in num:

        next_v = v + n

        # 探索打ち切り条件->

        # すでに探索済み or なにかの終了条件に引掛かる

        if int(next_v) > N: continue

        # 見られていない場合、再帰的に探索

        dfs(next_v)

        if "3" in next_v and "5" in next_v and "7" in next_v:

            cnt += 1



dfs("")

print(cnt)	
from collections import deque

X = int(eval(input()))
# その時の数字と、3,5,7が今までに含まれていたか
q = deque([""])
q_is3 = deque([0])
q_is5 = deque([0])
q_is7 = deque([0])
N = "357"
ans = 0
while q:
    num = q.popleft()
    is3 = q_is3.popleft()
    is5 = q_is5.popleft()
    is7 = q_is7.popleft()
    for n in N:
        next_v = num + n
        if int(next_v) > X:
            continue
        else:
            next_is3 = is3 or n == "3"
            next_is5 = is5 or n == "5"
            next_is7 = is7 or n == "7"
            q.append(next_v)
            q_is3.append(next_is3)
            q_is5.append(next_is5)
            q_is7.append(next_is7)
            if next_is3 and next_is5 and next_is7:
                ans += 1
print(ans)

"""
753の数
"""
import sys

sys.setrecursionlimit(100000)
N = int(eval(input()))
# seen = [False] * N
"""
1. Gを予め作って探索するパターン
2. Gを作りながら探索するパターン
"""
cnt = 0


def dfs(v):
    global cnt
    # vを訪問済みにする
    # seen[v] = True
    num = "753"
    # グラフ中の次のVについて
    for n in num:
        next_v = v + n
        # 探索打ち切り条件->
        # すでに探索済み or なにかの終了条件に引掛かる
        if int(next_v) > N:
            continue
        # 見られていない場合、再帰的に探索
        dfs(next_v)
        if "3" in next_v and "5" in next_v and "7" in next_v:
            cnt += 1


dfs("")
print(cnt)

-from collections import deque +""" +753の数 +""" +import sys -X = int(eval(input())) -# その時の数字と、3,5,7が今までに含まれていたか -q = deque([""]) -q_is3 = deque([0]) -q_is5 = deque([0]) -q_is7 = deque([0]) -N = "357" -ans = 0 -while q: -    num = q.popleft() -    is3 = q_is3.popleft() -    is5 = q_is5.popleft() -    is7 = q_is7.popleft() -    for n in N: -        next_v = num + n -        if int(next_v) > X: +sys.setrecursionlimit(100000) +N = int(eval(input())) +# seen = [False] * N +""" +1. Gを予め作って探索するパターン +2. Gを作りながら探索するパターン +""" +cnt = 0 + + +def dfs(v): +    global cnt +    # vを訪問済みにする +    # seen[v] = True +    num = "753" +    # グラフ中の次のVについて +    for n in num: +        next_v = v + n +        # 探索打ち切り条件-> +        # すでに探索済み or なにかの終了条件に引掛かる +        if int(next_v) > N: -        else: -            next_is3 = is3 or n == "3" -            next_is5 = is5 or n == "5" -            next_is7 = is7 or n == "7" -            q.append(next_v) -            q_is3.append(next_is3) -            q_is5.append(next_is5) -            q_is7.append(next_is7) -            if next_is3 and next_is5 and next_is7: -                ans += 1 -print(ans) +        # 見られていない場合、再帰的に探索 +        dfs(next_v) +        if "3" in next_v and "5" in next_v and "7" in next_v: +            cnt += 1 + + +dfs("") +print(cnt)