1. import time
  2. #start_time = time.time()
  3. #def TIME_(): print(time.time()-start_time)
  4. import os, sys
  5. from io import BytesIO, IOBase
  6. from types import GeneratorType
  7. from bisect import bisect_left, bisect_right
  8. from collections import defaultdict as dd, deque as dq, Counter as dc
  9. import math, string, heapq as h
  10. BUFSIZE = 8192
  11. class FastIO(IOBase):
  12. newlines = 0
  13. def __init__(self, file):
  14. import os
  15. self.os = os
  16. self._fd = file.fileno()
  17. self.buffer = BytesIO()
  18. self.writable = "x" in file.mode or "r" not in file.mode
  19. self.write = self.buffer.write if self.writable else None
  20. def read(self):
  21. while True:
  22. b = self.os.read(self._fd, max(self.os.fstat(self._fd).st_size, BUFSIZE))
  23. if not b:
  24. break
  25. ptr = self.buffer.tell()
  26. self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
  27. self.newlines = 0
  28. return self.buffer.read()
  29. def readline(self):
  30. while self.newlines == 0:
  31. b = self.os.read(self._fd, max(self.os.fstat(self._fd).st_size, BUFSIZE))
  32. self.newlines = b.count(b"\n") + (not b)
  33. ptr = self.buffer.tell()
  34. self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
  35. self.newlines -= 1
  36. return self.buffer.readline()
  37. def flush(self):
  38. if self.writable:
  39. self.os.write(self._fd, self.buffer.getvalue())
  40. self.buffer.truncate(0), self.buffer.seek(0)
  41. class IOWrapper(IOBase):
  42. def __init__(self, file):
  43. self.buffer = FastIO(file)
  44. self.flush = self.buffer.flush
  45. self.writable = self.buffer.writable
  46. self.write = lambda s: self.buffer.write(s.encode("ascii"))
  47. self.read = lambda: self.buffer.read().decode("ascii")
  48. self.readline = lambda: self.buffer.readline().decode("ascii")
  49. sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
  50. input = lambda: sys.stdin.readline().rstrip("\r\n")
  51. def getInt(): return int(input())
  52. def getStrs(): return input().split()
  53. def getInts(): return list(map(int,input().split()))
  54. def getStr(): return input()
  55. def listStr(): return list(input())
  56. def getMat(n): return [getInts() for _ in range(n)]
  57. def getBin(): return list(map(int,list(input())))
  58. def isInt(s): return '0' <= s[0] <= '9'
  59. def ceil_(a,b): return (a+b-1)//b
  60. MOD = 10**9 + 7
  61. """
  62. """
  63. from random import randint as ri
  64. LIM = 10**6+1
  65. facs = [[] for _ in range(LIM+1)]
  66. def primes(n):
  67. for i in range(2,n):
  68. if not min_div[i]:
  69. for j in range(i,n,i):
  70. min_div[j] = i
  71. return
  72. min_div = [0]*(LIM+1)
  73. min_div[1] = 1
  74. primes(LIM+1)
  75. facs[1] = [1]
  76. for i in range(2,LIM+1):
  77. facs[i] = [1]
  78. j = i
  79. while j > 1:
  80. x = min_div[j]
  81. c = 1
  82. j //= x
  83. while min_div[j] == x:
  84. c += 1
  85. j //= x
  86. new = []
  87. curr = 1
  88. for cc in range(1,c+1):
  89. curr *= x
  90. for k in facs[i]:
  91. new.append(k*curr)
  92. facs[i] += new
  93. facs[i].sort()
  94. def solve2(tot,min_):
  95. if tot % min_: return None
  96. if not tot: return 0
  97. if tot == min_: return 0
  98. best = 0
  99. for x in facs[tot]:
  100. if x > max(2,min_) and x % min_ == 0:
  101. y = solve2(tot-x,x)
  102. if y is not None:
  103. best = max(best,y)
  104. #print(tot,min_,best)
  105. return 1 + best
  106. def solve(case):
  107. N = getInt()
  108. ans = solve2(N,1)
  109. print("Case #{}: {}".format(case,ans))
  110. #print("Case #{}: {}".format(case,' '.join(list(map(str,ans)))))
  111. return
  112. T = getInt()
  113. for _ in range(T):
  114. solve(_+1)
  115. #solve()
  116. #TIME_()