#include <bits/stdc++.h>
#define WHOLE(v) (v).begin(), (v).end()
#define REV_WHOLE(v) (v).rbegin(), (v).rend()
using i64 = int64_t;
using namespace std;
template<class F>auto recursive(F f){return[f](auto...a){return f(f,a...);};}
template<class T>using rev_priority_queue=priority_queue<T,vector<T>,greater<T>>;
template<class T>using vector2d=vector<vector<T>>;
struct fixprec{int p;fixprec(int p):p(p){}};
ostream&operator<<(ostream&o,fixprec f){return o<<fixed<<setprecision(f.p);}
/*!* [intutil] *!*/
/*+* 整数演算いろいろ *+*/
i64 divceil(i64 a, i64 b) {
    return a / b + (a > 0 && a % b ? 1 : 0);
}
i64 logceil(i64 a, i64 b) {
    for(i64 i = 0, x = 1; a >= 2; x *= a, i++) if(x <= b) return i; return 0;
}
i64 gcd(i64 a, i64 b) {
    for (i64 c; a;) c = a, a = b % a, b = c; return b;
}
i64 lcm(i64 a, i64 b) {
    return (a / gcd(a, b) * b);
}
int main() {
    int N;
    cin >> N;
    vector<i64> A(N);
    for(i64 &a : A) cin >> a;
    bool ans;
    // i : ターン数 (0 mod 2 で自分のターン)
    for(int i = 0; true; i++) {
        i64 g = A[0];
        for(i64 a : A) g = gcd(g, a);
        for(i64 &a : A) a /= g;
        
        int even_num = 0;
        for(i64 a : A) even_num += (a % 2 == 0);
        if(even_num % 2) { // 偶数が奇数個
            ans = i % 2 == 0;
            break;
        } else { // 偶数が偶数個
            i64 odd = 0;
            for(i64 a : A) if(a % 2 == 1) odd = a; 
            if(N - even_num == 1 && odd > 2) { // 奇数が一つだけで、それは1でない
                for(i64 &a : A) if(a % 2 == 1) a--;
                continue;
            } else {
                ans = i % 2 == 1;
                break;
            }
        }
    }
    cout << (ans ? "First" : "Second") << endl;
    return 0;
}
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>

namespace IO {
    template <typename _T>
    inline bool read (_T& x) {
        x = 0;
        _T y = 1;
        char c = getchar();
        while ((c < '0' || '9' < c) && c != EOF) {
            if (c == '-') y = -1;
            c = getchar();
        }
        if (c == EOF) return false;
        while ('0' <= c && c <= '9') x = x * 10 + c - '0', c = getchar();
        x *= y;
        return true;
    }

    template <typename _T>
    inline _T input () {
        _T x = 0, y = 1;
        char c = getchar();
        while ((c < '0' || '9' < c) && c != EOF) {
            if (c == '-') y = -1;
            c = getchar();
        }
        if (c == EOF) return 0;
        while ('0' <= c && c <= '9') x = x * 10 + c - '0', c = getchar();
        x *= y;
        return x;
    }
};
using namespace IO;

namespace modular {
    const int MOD = 1000000007;

    inline int add (int x, int y) { return (x += y) >= MOD ? x -= MOD : x; }

    inline void inc (int &x, int y) { (x += y) >= MOD ? x -= MOD : 0; }

    inline int mul (int x, int y) { return 1LL * x * y % MOD; }

    inline int qpow (int x, int y) {
        int ans = 1;
        for (; y; y >>= 1, x = mul(x, x)) if (y & 1) ans = mul(ans, x);
        return ans;
    }
};

#define reg register
#define MAX_N 200007
#define FIN(s) freopen(s, "r", stdin)
#define FOUT(s) freopen(s, "w", stdout)
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define rep(i, l, r) for(int i = l; i <= r; ++i)
#define lep(i, l, r) for(int i = l; i < r; ++i)
#define irep(i, r, l) for(int i = r; i >= l; --i)
#define ilep(i, r, l) for(int i = r; i > l; --i)
typedef long long ll;

int N;
int a[MAX_N];

inline void print (bool k, bool p) { puts(k ^ p ? "First" : "Second"); exit(0); }

void dfs (int p) {
    int cnt[2] = {0, 0};
    rep (i, 1, N) cnt[a[i] & 1]++;
    rep (i, 1, N) if (a[i] == 1) print(cnt[0] & 1, p);
    if (cnt[0] & 1) print(1, p);
    else if (cnt[1] > 1) print(0, p);
    rep (i, 1, N) if (a[i] != 1 && (a[i] & 1)) a[i]--;
    int d = a[1];
    rep (i, 2, N) d = std::__gcd(d, a[i]);
    rep (i, 1, N) a[i] /= d;
    dfs(p ^ 1);
}

int main () {
#ifdef LOCAL
    FIN("in");
#endif
    read(N);
    rep (i, 1, N) read(a[i]);
    dfs(0);
    return 0;
}