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++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<bits/stdc++.h>
using namespace std;
#define INF 1<<20+1
int f(int n){
  int base=(n%2==0)?6:9;
  int ret=-1;
  int c=1;
  //cout<<n<<endl;
  while (round(pow(base,c))<=n){
    //  cout<<round(pow(base,c))<<endl;
     if(round(pow(base,c))==n){ret=1;break;}
     c++;
   }
   //cout<<"ret:"<<ret<<endl;
   return ret;
  }
int main(){
  int N;
  cin>>N;
  int dp[N+1]={};
  dp[1]=1;
  dp[2]=2;
  if (N<=2){cout<<N<<endl;return 0;}
  int c=3;
  while (c!=N+1){
    if (f(c)!=-1){dp[c]=1;c++;continue;}
    dp[c]=INF;
    int i=c/2;
    //int j=c-i;
    while(i>=1){
      dp[c]=min(dp[c],dp[i]+dp[c-i]);
      if (dp[c]==2) break;
      i=min(max(i-i%9,i-i%6),i-1);
      //j--;
    }
    c++;
  }
  cout<<dp[N]<<endl;
  return 0;
}