#include <bits/stdc++.h>
#define int long long
#define mod 998244353
#define foi(i,n) for(int i = 0; i < n ; ++i)
#define pi pair<int,int>
#define pb push_back
#define debug cout << "here" << endl;
using namespace std;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<string> vs;

int dp[100000];

int findProfit(int mask,int arr[16][16]){
	int answer =0 ;
	vector<int> points;
	int ctr =0 ;
	while(mask){
		if(mask&1) points.pb(ctr);
		ctr++;
		mask = mask>>1;
	}

	for(int i = 0 ;i < points.size();i++){
		for(int j = i+1 ; j < points.size();j++) answer += arr[points[i]][points[j]];
	}

	//for(auto y : points ) cout << y << " ";
	//cout << endl;
	return answer;
}

void init(int n,int arr[16][16]){
	dp[0] = 0;

	for(int i = 1 ; i <= (((1)<<n)-1) ; i++){
		int answer = findProfit(i,arr);
		for(int j = i-1 ; j>=0 ; j--){
			if((j|i) == i) answer = max(answer , dp[j] + dp[(i^j)]);
		}
		dp[i] = answer;
	}


}


int32_t main(){

    memset(dp,0,sizeof(dp));

	int n;
	cin >> n;

	int arr[16][16];

	foi(i,n){
		foi(j,n) cin >> arr[i][j] ;
	}

	init(n,arr);

	cout << dp[((1LL)<<n)-1];

}


#include<bits/stdc++.h>

#define REP(i,a,b) for(int i=a;i<=b;++i)
typedef long long ll;

using namespace std;

void File(){
	freopen("AGC10D.in","r",stdin);
	freopen("AGC10D.out","w",stdout);
}

const int maxn=1e5+10;
int n;
ll a[maxn],sum;

bool dfs(bool now){
	REP(i,1,n)if(a[i]%2==1)--a[i];
	ll d=a[1];
	REP(i,1,n)d=__gcd(a[i],d);
	int cnt=0; sum=0;
	bool flag=0;
	REP(i,1,n){
		a[i]/=d;
		sum+=a[i];
		if(a[i]%2==1)++cnt;
		if(a[i]==1)flag=1;
	}
	if(sum%2==0)return now^1;
	if(sum%2==1 && (cnt>=2 || flag))return now;
	return dfs(now^1);
}

int main(){
	//File();
	scanf("%d",&n);
	REP(i,1,n){
		scanf("%lld",&a[i]);
		sum+=a[i];
	}
	if(n%2!=sum%2)puts("First");
	else if(n%2==0 && sum%2==0)puts("Second");
	else{
		int cnt=0;
		REP(i,1,n){
			if(a[i]%2==1)++cnt;
			if(cnt>=2 || a[i]==1){
				puts("Second");
				return 0;
			}
		}
		if(dfs(1))puts("First");
		else puts("Second");
	}
	return 0;
}