Problem:
Score : 800 points

Problem Statement

You are given a polynomial of degree N with integer coefficients: f(x)=a_Nx^N+a_{N-1}x^{N-1}+...+a_0. Find all prime numbers p that divide f(x) for every integer x.

Constraints

0 \leq N \leq 10^4

|a_i| \leq 10^9(0\leq i\leq N)

a_N \neq 0

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
a_N
:
a_0

Output

Print all prime numbers p that divide f(x) for every integer x, in ascending order.

Sample Input 1

2
7
-7
14

Sample Output 1

2
7

2 and 7 divide, for example, f(1)=14 and f(2)=28.

Sample Input 2

3
1
4
1
5

Sample Output 2

There may be no integers that satisfy the condition.

Sample Input 3

0
998244353

Sample Output 3

998244353

Solution in Python (3.4.3) (judge verdict: Wrong Answer)

from itertools import cycle
from fractions import gcd
from random import randrange

# 素因数分解
def prime_factors(n):
    i = 2
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
            yield i
    if n > 1:
        yield n


N = int(input())
A = list(int(input()) for _ in range(N+1))
A.reverse()


a = abs(sum(A))
b = abs(sum(a*b for a,b in zip(A, cycle((1,-1)))))
c = abs(A[0])
g = gcd(gcd(a,b),c)
P = set(prime_factors(g))

CHECK = 3
res = []

for p in P:

	C = [a%p for a in A]

	for _ in range(CHECK):
		x = randrange(1, p)
		def it():
			xp = 1
			for c in C:
				yield c*xp
				xp *= x
				xp %= p
		r = sum(it())%p
		if r != 0:
			break
	else:
		res.append(p)

print(*res, sep='\n')