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 JavaScript (node.js v5.12) (judge verdict: Time Limit Exceeded)

function Main(input) {
  input = input.split("\n");
  N = parseInt(input[0]);
  a = new Array(1).fill(1);
  six = new Array(1).fill(6);
  nine = new Array(1).fill(9);
  for(i=1;six[i-1]<100000;i++){
    six.push(six[i-1]*6);
  }
  for(i=1;nine[i-1]<100000;i++){
    nine.push(nine[i-1]*9);
  }
  a.push(...six);
  a.push(...nine);
  a.sort(function(a,b){return b-a});
  map =new Array(N+1).fill(N);
  map[N]=0;
  for(i=2;i<a.length;i++){
    for(j=N;j>=0;j--){
      var b = j;
      var c = map[j];
      if(map[j]!=N){
        while(b/a[i]>=1){
          c++;
          b-=a[i];
          map[b]=Math.min(map[b],c);
        }
      }
    }
  }
  var ans=map[0];

  console.log('%s', ans);
}
  
// "実行する"ボタンを押した時に実行される関数 (デバッグ用)
function debug(){
  var input = document.getElementById("input").value;
  Main(input);
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));