n = int(eval(input()))



#引き出せる金額の列挙

Withdr = [1] + [6**i for i in range(1, 7)] + [9**i for i in range(1,6)]

INF = 100010

dp = [INF]*159050

dp[0] = 0



#全てを順に計算

for j in range(n + 1):

    #あるnに対し複数の計算方法があるため、それらの中で一番少ないものをdpに格納する

    for WithdrOrder in Withdr:

        #dp[j + WithdrOrder]は今までに計算した最小値とdp[j]から1回で引き出せる金額を足したものとの比較で算出

        dp[j + WithdrOrder] = min(dp[j + WithdrOrder], dp[j] + 1)

print((dp[n]))
N=int(eval(input()))

ans=N

for i in range(N+1):

    element_cnt=0

    t=i

    '''Nを6の累乗で処理する部分(i)と9の累乗で処理する部分(j)に分ける

    ある数(i)を6で割った余りは6のゼロ乗の要素がいくつ含まれるかを示す

    ある数の6の商をさらに6で割った余りは、ある数に6の1乗がいくつ含まれるかを示す

    ある数の6の商の6の商をさらに6で割った余りは、ある数に6の2乗がいくつ含まれるかを示す

    したがって、ある数を6で割って余りと商を順に処理すれば6の累乗の要素がどれだけあるかがわかる。

    最終的に商がゼロになるまで繰り返す

    '''

    while t>0:

        element_cnt+=t%6

        t//=6

    j=N-i

    while j>0:

        element_cnt+=j%9

        j//=9

    ans = min(ans,element_cnt)

print(ans)
n = int(eval(input()))
# 引き出せる金額の列挙
Withdr = [1] + [6**i for i in range(1, 7)] + [9**i for i in range(1, 6)]
INF = 100010
dp = [INF] * 159050
dp[0] = 0
# 全てを順に計算
for j in range(n + 1):
    # あるnに対し複数の計算方法があるため、それらの中で一番少ないものをdpに格納する
    for WithdrOrder in Withdr:
        # dp[j + WithdrOrder]は今までに計算した最小値とdp[j]から1回で引き出せる金額を足したものとの比較で算出
        dp[j + WithdrOrder] = min(dp[j + WithdrOrder], dp[j] + 1)
print((dp[n]))

N = int(eval(input()))
ans = N
for i in range(N + 1):
    element_cnt = 0
    t = i
    """Nを6の累乗で処理する部分(i)と9の累乗で処理する部分(j)に分ける
    ある数(i)を6で割った余りは6のゼロ乗の要素がいくつ含まれるかを示す
    ある数の6の商をさらに6で割った余りは、ある数に6の1乗がいくつ含まれるかを示す
    ある数の6の商の6の商をさらに6で割った余りは、ある数に6の2乗がいくつ含まれるかを示す
    したがって、ある数を6で割って余りと商を順に処理すれば6の累乗の要素がどれだけあるかがわかる。
    最終的に商がゼロになるまで繰り返す
    """
    while t > 0:
        element_cnt += t % 6
        t //= 6
    j = N - i
    while j > 0:
        element_cnt += j % 9
        j //= 9
    ans = min(ans, element_cnt)
print(ans)

-n = int(eval(input())) -# 引き出せる金額の列挙 -Withdr = [1] + [6**i for i in range(1, 7)] + [9**i for i in range(1, 6)] -INF = 100010 -dp = [INF] * 159050 -dp[0] = 0 -# 全てを順に計算 -for j in range(n + 1): -    # あるnに対し複数の計算方法があるため、それらの中で一番少ないものをdpに格納する -    for WithdrOrder in Withdr: -        # dp[j + WithdrOrder]は今までに計算した最小値とdp[j]から1回で引き出せる金額を足したものとの比較で算出 -        dp[j + WithdrOrder] = min(dp[j + WithdrOrder], dp[j] + 1) -print((dp[n])) +N = int(eval(input())) +ans = N +for i in range(N + 1): +    element_cnt = 0 +    t = i +    """Nを6の累乗で処理する部分(i)と9の累乗で処理する部分(j)に分ける +    ある数(i)を6で割った余りは6のゼロ乗の要素がいくつ含まれるかを示す +    ある数の6の商をさらに6で割った余りは、ある数に6の1乗がいくつ含まれるかを示す +    ある数の6の商の6の商をさらに6で割った余りは、ある数に6の2乗がいくつ含まれるかを示す +    したがって、ある数を6で割って余りと商を順に処理すれば6の累乗の要素がどれだけあるかがわかる。 +    最終的に商がゼロになるまで繰り返す +    """ +    while t > 0: +        element_cnt += t % 6 +        t //= 6 +    j = N - i +    while j > 0: +        element_cnt += j % 9 +        j //= 9 +    ans = min(ans, element_cnt) +print(ans)