//メモ化再起用グローバル配列
const MAX_N = 128;
var memo = [MAX_N];

//メモ化再起処理の本体
function rec(N){
  
  //終端条件(再帰では絶対必要)
  if(N===0){ return 0; }
  //メモを見てすでに探索済みならその値をリターン
  if(memo[N] !== -1) return memo[N];
  
  //答えに近い変数
  var res = N;
  
  //6の累乗値でNを超えない範囲を再帰
  for( var pow6 = 1; pow6 <= N; pow6 *= 6){
    res = Math.min(res, rec(N - pow6) + 1);
    //console.log("6の累乗値",res,"Pow6=",pow6);
  }
  
  //9の累乗値でNを超えない範囲を再帰
  for( var pow9 = 1; pow9 <= N; pow9 *= 9){
    res = Math.min(res, rec(N - pow9) + 1);
    //console.log("9の累乗値",res,"Pow9=",pow9);
  }
  
  memo[N] = res;
  //console.log(N,res);
  return res;
}
//Main関数
function Main(input){
  //入力値Nを数値化して確保
  input = input.split("\n");
  inputStr = input[0].split(" ");
  var N = Number.parseInt(inputStr[0]);

  //メモ化再起用グローバル配列の初期化
  for(var i = 0; i < MAX_N ; i++){
    memo[i] = -1;
  }
  console.log(rec(N));
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));