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)

#include<iostream>
#include<cmath>
#include<algorithm>
#include<vector>
#include<cstring>
#include<string>
#include<iomanip>
#include<map>
#include<fstream>
//#include"big_integers.h"

using namespace std;

int dp[13][100001];//i番目までのお金を使ってj円払う時の最小回数
int money[] = { 1,6,9,36,81,216,729,1296,6561,7776,46656,59049 };

int main()
{
	int n;
	cin >> n;

	for (int i = 0; i <= 12; i++) {
		for (int j = 0; j <= n; j++) {
			dp[i][j] = 1 << 30;
		}
	}
	//for (int i = 0; i <= 12; i++)
	//	dp[i][0] = 0;
	dp[0][0] = 0;

	for (int i = 0; i < 12; i++) {
		for (int j = 0; j <= n; j++) {
			if (j < money[i])
				dp[i + 1][j] = dp[i][j];
			else
				dp[i + 1][j] = min(dp[i][j], dp[i+1][j - money[i]]+1);
			printf("dp[%d][%d]=%d\n", i + 1, j, dp[i + 1][j]);
		}
	}
	cout << dp[11][n] << endl;
}