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 C# (Mono 4.6.2.0) (judge verdict: Runtime Error)

using System;
using System.IO;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using static System.Math;
using Debug = System.Diagnostics.Debug;
using MethodImplOptions = System.Runtime.CompilerServices.MethodImplOptions;
using MethodImplAttribute = System.Runtime.CompilerServices.MethodImplAttribute;


static class P
{
    const int MOD = 998244353;

    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        DateTime start = DateTime.Now;
        HashSet<long> candidate = new HashSet<long>();
        var a = Enumerable.Repeat(0, n + 1).Select(_ => long.Parse(Console.ReadLine())).ToArray();

        long oddsum = 0;
        long evensum = 0;
        for (int i = 0; i < a.Length; i++)
        {
            if (i % 2 == 1) oddsum += a[i];
            else evensum += a[i];
        }

        { 
            var last = Abs(a[n]);
            if (last % 2 == 0) candidate.Add(2);
            while (last % 2 == 0) last /= 2;
            long cand = 3;
            while (cand * cand <= last)
            {
                if (last % cand == 0) candidate.Add(cand);
                while (last % cand == 0) last /= cand;
                cand += 2;
            }
            if (last != 1) candidate.Add(last);
        }

        if (candidate.Count >= 12) throw new Exception();
        foreach (var item in candidate)
        {
            if (Abs(oddsum + evensum) % item != 0) candidate.Remove(item);
            else if (Abs(oddsum - evensum) % item != 0) candidate.Remove(item);
        }
        Console.WriteLine(string.Join("\n", candidate.OrderBy(x => x)));
    }

}