Problem:
Score : 300 points

Problem Statement

To make it difficult to withdraw money, a certain bank allows its customers to withdraw only one of the following amounts in one operation:

1 yen (the currency of Japan)

6 yen, 6^2(=36) yen, 6^3(=216) yen, ...

9 yen, 9^2(=81) yen, 9^3(=729) yen, ...

At least how many operations are required to withdraw exactly N yen in total?

It is not allowed to re-deposit the money you withdrew.

Constraints

1 \leq N \leq 100000

N is an integer.

Input

Input is given from Standard Input in the following format:

N

Output

If at least x operations are required to withdraw exactly N yen in total, print x.

Sample Input 1

127

Sample Output 1

4

By withdrawing 1 yen, 9 yen, 36(=6^2) yen and 81(=9^2) yen, we can withdraw 127 yen in four operations.

Sample Input 2

3

Sample Output 2

3

By withdrawing 1 yen three times, we can withdraw 3 yen in three operations.

Sample Input 3

44852

Sample Output 3

16

Solution in C (GCC 5.4.1) (judge verdict: Wrong Answer)

// c strange bank
#include <stdio.h>

void rec_withdraw(int *remaining, int ar_pow6[7], int ar_pow9[6], int *ans){
    int withdraw6 = 0, withdraw9 = 0, withdrawal;

    for(int i = 0; i < 8; i++){
        //printf("------------------ i = %d ------------------\n", i);
        if(*remaining >= ar_pow6[i] && ar_pow6[i] > withdraw6){
            withdraw6 = ar_pow6[i];
            //printf("withdraw6 = %d\n", withdraw6);
        }

        if(i == 7) continue;

        if(*remaining >= ar_pow9[i] && ar_pow9[i] > withdraw9){
            withdraw9 = ar_pow9[i];
            //printf("withdraw9 = %d\n", withdraw9);
        }
    }

    int q6 = *remaining / withdraw6, r6 = *remaining % withdraw6;
    int q9 = *remaining / withdraw9, r9 = *remaining % withdraw9;
    //printf("%d = %d * %d + %d\n%d = %d * %d + %d\n 6: %d, 9: %d\n", *remaining, withdraw6, q6, r6, *remaining, withdraw9, q9, r9, q6+r6, q9+r9);
    if(withdraw6 < withdraw9){
        withdrawal = (r6 < 3)? withdraw6 : withdraw9;
    }else{
        withdrawal = withdraw6;
    }

    //printf("previous remaining = %d, withdrawal = %d\n", *remaining, withdrawal);
    *remaining -= withdrawal;
    (*ans)++;
    //printf("current remaining = %d, ans = %d\n", *remaining, *ans);

    if(*remaining > 0){
        rec_withdraw(remaining, ar_pow6, ar_pow9, ans);
    }
    
    //printf("Finished\n");
    return;    
}

int main(void){
    int ar_pow6[7] = {1, 6, 36, 216, 216*6, 216*6*6, 46656};
    int ar_pow9[6] = {1, 9, 81, 729, 6561, 59049};

    int n;
    scanf("%d", &n);

    int ans = 0;
    rec_withdraw(&n, ar_pow6, ar_pow9, &ans);
    printf("%d\n", ans);
    return 0;
}