Problem:
Score : 300 points

Problem Statement

There are N integers, A_1, A_2, ..., A_N, written on the blackboard.

You will choose one of them and replace it with an integer of your choice between 1 and 10^9 (inclusive), possibly the same as the integer originally written.

Find the maximum possible greatest common divisor of the N integers on the blackboard after your move.

Constraints

All values in input are integers.

2 \leq N \leq 10^5

1 \leq A_i \leq 10^9

Output

Input is given from Standard Input in the following format:

N
A_1 A_2 ... A_N

Output

Print the maximum possible greatest common divisor of the N integers on the blackboard after your move.

Sample Input 1

3
7 6 8

Sample Output 1

2

If we replace 7 with 4, the greatest common divisor of the three integers on the blackboard will be 2, which is the maximum possible value.

Sample Input 2

3
12 15 18

Sample Output 2

6

Sample Input 3

2
1000000000 1000000000

Sample Output 3

1000000000

We can replace an integer with itself.

Solution in C# (Mono 4.6.2.0) (judge verdict: Wrong Answer)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;

namespace ABC125C
{
    class Program
    {
        static void Main(string[] args)
        {

            Int32 n = Int32.Parse(Console.ReadLine());

            Int32[] v = Console.ReadLine().Split().Select(s => Int32.Parse(s)).ToArray();


            Array.Sort(v);

            Int32 a = 0;
            int o = 1;

            if (n == 2)
            {
                    a = v[0];
            }
            else
            {
                for (int i = 0; i < n - 1; ++i) {
                    int cou = 0;
                    a = Gcd(v[i], v[n - 2]);
                    if (a == 1)
                    {
                        break;
                    }
                    for(int j = 0;j < n; ++j)
                    {
                        if (v[j] % a == 0) cou++;
                    }
                    if (cou >= 2)
                    {
                        o++;
                        break;
                    }
                }
            }


            Console.WriteLine(a);

            

        }
        public static int Gcd(int a, int b)
        {
            if (a < b)
                // 引数を入替えて自分を呼び出す
                return Gcd(b, a);
            while (b != 0)
            {
                var remainder = a % b;
                a = b;
                b = remainder;
            }
            return a;
        }
    }
}