def miller_rabin(n): # 参考: http://tjkendev.github.io/procon-library/python/prime/probabilistic.html # 確率的素数判定(ミラーラビン素数判定法) # 素数なら確実に True を返す、合成数なら確率的に False を返す # True が返ったなら恐らく素数で、False が返ったなら確実に合成数である primes = [3, 5, 7, 11, 13, 17, 19, 23] if n==2 or n in primes: return True if n<=1 or n&1==0: return False d = m1 = n-1 d //= d & -d for a in primes: t = d y = pow(a, t, n) while t!=m1 and y!=1 and y!=m1: y = y * y % n t <<= 1 if y!=m1 and t&1==0: return False return True N = int(input()) X = [int(input()) for _ in range(N)] for x in X: print(x, int(miller_rabin(x)))