fun readInt () = valOf (TextIO.scanStream (Int.scan StringCvt.DEC) TextIO.stdIn) fun findAns n (index, max) = if n = 1 then ( (index, max) ) else ( let val newN = if n mod 2 = 0 then n div 2 else 3 * n + 1 val newMax = LargeInt.max (max, newN) in findAns newN (index + 1, newMax) end ) val () = let val n0 = readInt () val (ansIndex, ansMax) = findAns (Int.toLarge n0) (Int.toLarge 0, Int.toLarge n0) in ( print (LargeInt.toString ansIndex ^ "\n"); print (LargeInt.toString ansMax ^ "\n") ) end