# https://yukicoder.me/problems/no/3776 MOD = 998244353 def main(): T = int(input()) K = [] for _ in range(T): K.append(int(input())) max_k = max(K) + 1 # osa-k法 primes = [k for k in range(max_k + 1)] for p in range(2, max_k + 1): if primes[p] != p: continue x = 2 * p while x <= max_k: if primes[x] == x: primes[x] = p x += p # 本格的に解く answer_cache = [-1] * (max_k + 1) for k in K: if answer_cache[k] != -1: print(answer_cache[k]) continue k0 = k p_map = {} while k0 > 1: p = primes[k0] k0 //= p if p not in p_map: p_map[p] = 0 p_map[p] += 1 answer = 1 for value in p_map.values(): array = [] for x in range(value + 1): for y in range(value + 1): if value - (x + y) >= 0: z = value - (x + y) array.append((x, y, z)) ans = 0 for x11, x12, x13 in array: for x21, x22, x23 in array: x = value - x11 - x21 y = value - x12 - x22 z = value - x13 - x23 if x >= 0 and y>= 0 and z >= 0 and x + y + z == value: ans += 1 answer *= ans answer %= MOD answer_cache[k] = answer print(answer) if __name__ == "__main__": main()