# 動的計画法(dp)

# dp[N](数列)を求めたい。

# dp[0]からdp[N-1]は既知(最小となるっている)とする。

# dp[N] = (dp[N-1] + 1) , (dp[N-6] + 1) , ... , (dp[N-6^i] + 1) , (dp[N-9] + 1) , ... , (dp[N-9^j] + 1)の中から最小のものを選べば良い

# プログラム上では0からNまで回して1つずつ最小化すれば良い

N = int(eval(input()))



INF = 10**7

dp = [INF for _ in range(N+1)] # 0からNまで

dp[0] = 0 # 0番目以外は大きい値に初期化



for i in range(1, N+1):

    dp[i] = dp[i-1] + 1

    power = 6

    while power <= N: # N-6^xが非負の範囲で

        dp[i] = min(dp[i], dp[i - power] + 1)

        power *= 6

    power = 9

    while power <= N: # N-9^xが非負の範囲で

        dp[i] = min(dp[i], dp[i - power] + 1)

        power *= 9



print((dp[N]))





"""

# 大きい方から貪欲に取るのは誤り(例えば12について、12=9+1+1+1になるが12=6+6の方がより少ない)

N = int(input())



money = [1]

for i in range(1, 100):

    if 6**i <= N:

        money.append(6**i)

    if 9**i <= N:

        money.append(9**i)

    if 6**i > N and 9**i > N:

        break

money.sort()

money.reverse()



zannkinn = N

ans = 0

for i in range(len(money)):

    ans += zannkinn//money[i]

    zannkinn = zannkinn % money[i]

    if zannkinn == 0:

        break



print(ans)

"""
N = int(eval(input()))



dp = [10**9 for _ in range(N+1)] # 0円からN円までのリスト

dp[0] = 0



for i in range(1, N+1): # i円払う最小手数を入れる

    dp[i] = min(dp[i], dp[i-1] + 1)



    power_6 = 6

    while i >= power_6:

        dp[i] = min(dp[i], dp[i-power_6] + 1)

        power_6 *= 6



    power_9 = 9

    while i >= power_9:

        dp[i] = min(dp[i], dp[i-power_9] + 1)

        power_9 *= 9



ans = dp[N]

print(ans)

# 動的計画法(dp)
# dp[N](数列)を求めたい。
# dp[0]からdp[N-1]は既知(最小となるっている)とする。
# dp[N] = (dp[N-1] + 1) , (dp[N-6] + 1) , ... , (dp[N-6^i] + 1) , (dp[N-9] + 1) , ... , (dp[N-9^j] + 1)の中から最小のものを選べば良い
# プログラム上では0からNまで回して1つずつ最小化すれば良い
N = int(eval(input()))
INF = 10**7
dp = [INF for _ in range(N + 1)]  # 0からNまで
dp[0] = 0  # 0番目以外は大きい値に初期化
for i in range(1, N + 1):
    dp[i] = dp[i - 1] + 1
    power = 6
    while power <= N:  # N-6^xが非負の範囲で
        dp[i] = min(dp[i], dp[i - power] + 1)
        power *= 6
    power = 9
    while power <= N:  # N-9^xが非負の範囲で
        dp[i] = min(dp[i], dp[i - power] + 1)
        power *= 9
print((dp[N]))
"""
# 大きい方から貪欲に取るのは誤り(例えば12について、12=9+1+1+1になるが12=6+6の方がより少ない)
N = int(input())
money = [1]
for i in range(1, 100):
    if 6**i <= N:
        money.append(6**i)
    if 9**i <= N:
        money.append(9**i)
    if 6**i > N and 9**i > N:
        break
money.sort()
money.reverse()
zannkinn = N
ans = 0
for i in range(len(money)):
    ans += zannkinn//money[i]
    zannkinn = zannkinn % money[i]
    if zannkinn == 0:
        break
print(ans)
"""

N = int(eval(input()))
dp = [10**9 for _ in range(N + 1)]  # 0円からN円までのリスト
dp[0] = 0
for i in range(1, N + 1):  # i円払う最小手数を入れる
    dp[i] = min(dp[i], dp[i - 1] + 1)
    power_6 = 6
    while i >= power_6:
        dp[i] = min(dp[i], dp[i - power_6] + 1)
        power_6 *= 6
    power_9 = 9
    while i >= power_9:
        dp[i] = min(dp[i], dp[i - power_9] + 1)
        power_9 *= 9
ans = dp[N]
print(ans)

-# 動的計画法(dp) -# dp[N](数列)を求めたい。 -# dp[0]からdp[N-1]は既知(最小となるっている)とする。 -# dp[N] = (dp[N-1] + 1) , (dp[N-6] + 1) , ... , (dp[N-6^i] + 1) , (dp[N-9] + 1) , ... , (dp[N-9^j] + 1)の中から最小のものを選べば良い -# プログラム上では0からNまで回して1つずつ最小化すれば良い -INF = 10**7 -dp = [INF for _ in range(N + 1)]  # 0からNまで -dp[0] = 0  # 0番目以外は大きい値に初期化 -for i in range(1, N + 1): -    dp[i] = dp[i - 1] + 1 -    power = 6 -    while power <= N:  # N-6^xが非負の範囲で -        dp[i] = min(dp[i], dp[i - power] + 1) -        power *= 6 -    power = 9 -    while power <= N:  # N-9^xが非負の範囲で -        dp[i] = min(dp[i], dp[i - power] + 1) -        power *= 9 -print((dp[N])) -""" -# 大きい方から貪欲に取るのは誤り(例えば12について、12=9+1+1+1になるが12=6+6の方がより少ない) -N = int(input()) -money = [1] -for i in range(1, 100): -    if 6**i <= N: -        money.append(6**i) -    if 9**i <= N: -        money.append(9**i) -    if 6**i > N and 9**i > N: -        break -money.sort() -money.reverse() -zannkinn = N -ans = 0 -for i in range(len(money)): -    ans += zannkinn//money[i] -    zannkinn = zannkinn % money[i] -    if zannkinn == 0: -        break +dp = [10**9 for _ in range(N + 1)]  # 0円からN円までのリスト +dp[0] = 0 +for i in range(1, N + 1):  # i円払う最小手数を入れる +    dp[i] = min(dp[i], dp[i - 1] + 1) +    power_6 = 6 +    while i >= power_6: +        dp[i] = min(dp[i], dp[i - power_6] + 1) +        power_6 *= 6 +    power_9 = 9 +    while i >= power_9: +        dp[i] = min(dp[i], dp[i - power_9] + 1) +        power_9 *= 9 +ans = dp[N] -"""