#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
#define _USE_MATH_DEFINES
#include <math.h>
#define NIL = -1;
#define all(x) x.begin(),x.end()
const ll INF = 1e9;
const ll INFL = 1e18;
const ll mod = 1e9 + 7;
 
int digit(ll x) {
    int digits = 0;

    while(x > 0){
        x /= 10;
        digits++;
    }

    return digits;
}
 
ll gcd(long long a,long long b) {
    if (a < b) swap(a,b);
    if (b == 0) return a;
    
    return gcd(b,a%b);
}

bool is_prime(long long N){
    if (N == 1) return false;
    for (long long i = 2;i * i <= N;i++){
        if (N % i == 0) return false;
    }
    return true;
}
 
ll lcm(ll a,ll b){
    return ((a * b == 0)) ? 0 : (a / gcd(a,b) * b);
}
 
double DegreeToRadian(double degree){
    return degree * M_PI / 180.0;
}
 
 
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};
 
 
///////////////////////////////////////////////////////////////////////////////////

int main(){
    long long n;
    cin >> n;
    int ans = digit(n);
    for (long long i = 1LL;i * i <= n;i++){
        if (n % i != 0) continue;
        long long b = n / i;

        int res = max(digit(i), digit(b));

        if (ans > res){
            ans = res;
        }
    }

    cout << ans << endl;
}
#include <bits/stdc++.h>
#define pb push_back
#define cmin(a,b) (a>b?a=b:a)
#define cmax(a,b) (a<b?a=b:a)
#define lop(i,s,t) for(int i=s;i<(t);++i)
#define rep(i,s,t) for(int i=s;i<=(t);++i)
#define dec(i,s,t) for(int i=s;i>=(t);--i)
#define fore(i,v) for(int i=g[v],d=es[i].d;i;i=es[i].nxt,d=es[i].d)
using namespace std;

#define Pr(f,...) //fprintf(stderr,f,##__VA_ARGS__),fflush(stderr)

const int N=5e5+50; 

void read(int &x){
	x=0; 
	char c=getchar(); 
	for(;!isdigit(c);c=getchar()); 
	for(;isdigit(c);c=getchar())x=x*10+c-'0'; 
}

int n,a[N],odd,even,exist;

int gcd(int a,int b){ return !b?a:gcd(b,a%b); }

void maintain(){
	int g=a[1];
	rep(i,2,n)g=gcd(g,a[i]); 
	rep(i,1,n)a[i]/=g;
	odd=even=exist=0; 
	rep(i,1,n){
		odd+=a[i]%2==1;
		even+=a[i]%2==0; 
		exist|=a[i]==1;
	}
}

int main(int argc,char *argv[]){
#ifdef CURIOUSCAT
	//freopen("dat.in","r",stdin);
	//freopen("my.out","w",stdout);
#endif
	read(n); 
	rep(i,1,n)read(a[i]); 
	int cur=1,win; 
	do{
		maintain(); 
		rep(i,1,n)Pr("%d ",a[i]);Pr("\n"); 
		if(even%2==1){
			win=cur;
			break;
		}else if(odd>1){
			win=!cur;
			break;
		}else{
			if(exist){
				win=!cur; 
				break;
			}
			rep(i,1,n)a[i]/=2; 
		}
		cur=!cur; 
	}while(true);
	puts(win==1?"First":"Second"); 
}