/*
*/

#pragma GCC optimize("O3")
#define _CRT_SECURE_NO_WARNINGS
#include <fstream>
#include <iostream>
#include <string>
#include <complex>
#include <math.h>
#include <set>
#include <vector>
#include <map>
#include <queue>
#include <stdio.h>
#include <stack>
#include <algorithm>
#include <list>
#include <ctime>

#include <memory.h>
#include <assert.h>

#define y0 sdkfaslhagaklsldk

#define y1 aasdfasdfasdf
#define yn askfhwqriuperikldjk
#define j1 assdgsdgasghsf
#define tm sdfjahlfasfh
#define lr asgasgash
#define norm asdfasdgasdgsd
#define have adsgagshdshfhds
#define ends asdgahhfdsfshdshfd

#define eps 1e-11
#define M_PI 3.141592653589793
#define BS 12345678891
#define bsize 256

#define ldouble long double

using namespace std;

long long INF = 1e9;
const int N = 500031;

map<vector<int>,int> memo;
int n;
int ar[N];
vector<int> vals;

int G(int a,int b)
{
	while (a&&b)a>b?a%=b:b%=a;
	return a+b;
}

int gcd(vector<int> v)
{
	int res=0;
	for (int i=0;i<v.size();i++)
	{
		res=G(res,v[i]);
	}
	return res;
}

vector<int> normalize(vector<int> v){
	int q=gcd(v);
	for (int i=0;i<v.size();i++)
	{
		v[i]/=q;
	}
	return v;
}

int solve(vector<int> v)
{
	sort(v.begin(),v.end());

	if (memo.find(v)!=memo.end())
		return memo[v];

	int res=-1;
	for (int i=0;i<v.size();i++)
	{
		if (v[i]==1)
			continue;
		vector<int> v2=v;
		v2[i]--;
		v2=normalize(v2);
		int here=solve(v2);
		if (here==-1)
		{
			res=1;
			break;
		}
	}
	memo[v]=res;
	return res;
}

long long count_moves(vector<int> v)
{
	long long res=0;
	for (int i=0;i<v.size();i++)
	{
		res+=v[i]-1;
	}
	return res;
}

int guess_solver(vector<int> v)
{
	/*random_shuffle(v.begin(),v.end());
	for (int i=0;i<v.size();i++)
	{
		cout<<v[i]<<" ";
	}
	cout<<endl;
	*/
	long long here=count_moves(v);
	//cout<<here<<endl;

	if (here%2==1)
		return 1;

	vector<int> p_gcd;
	vector<int> s_gcd;
	p_gcd.resize(v.size()+1);
	s_gcd.resize(v.size()+1);
	for (int i=0;i<=v.size();i++)
	{
		p_gcd[i]=s_gcd[i]=0;
	}

	for (int i=0;i<v.size();i++)
	{
		p_gcd[i+1]=G(p_gcd[i],v[i]);
	}

	for (int i=v.size()-1;i>=0;--i)
	{
		s_gcd[i]=G(s_gcd[i],s_gcd[i+1]);
	}

	for (int i=0;i<v.size();i++)
	{
		if (v[i]==1)
			continue;
		int here=G(p_gcd[i],s_gcd[i+1]);
		here=G(here,v[i]-1);
		if (here==1)
			continue;
		vector<int> v2=v;
		v2[i]--;
		if (gcd(v2)==1)
			continue;
		v2=normalize(v2);
		if (guess_solver(v2)==-1)
			return 1;
	}
	return -1;
}

int main(){
	//freopen("tree.in","r",stdin);
	//freopen("tree.out","w",stdout);
	//freopen("in.txt", "r", stdin);
	//freopen("out.txt", "w", stdout);
	ios_base::sync_with_stdio(0);
	//cin.tie(0);

/*	while (true)
	{
		n=rand()%6+4;
		vals.clear();
		for (int i=0;i<n;i++)
		{
			vals.push_back(rand()%10+1);
		}
		if (gcd(vals)!=1)
			continue;
		int here=solve(vals);
	*/

	cin>>n;
	for (int i=0;i<n;i++)
	{
		int v;
		cin>>v;
		vals.push_back(v);
	}

		int should_be=guess_solver(vals);

		if (should_be==1)
			cout<<"First"<<endl;
		else
			cout<<"Second"<<endl;

		/*if (should_be==here)
		{
			cout<<"OK"<<endl;
		}
		else
		{
			cout<<"SHIT"<<endl;
			for (int i=0;i<vals.size();i++)
			{
				cout<<vals[i]<<" ";
			}
			cout<<endl;
			cout<<here<<" "<<should_be<<endl;

			cin.get();
//			while (true);
		}*/

	cin.get(); cin.get();
	return 0;
}


Measured memory_bytes: 37384