#include <bits/stdc++.h>
using namespace std;
#define repl(i, l, r) for (ll i = (l); i < (r); i++)
#define rep(i, n) repl(i, 0, n)
#define fi first
#define se second
#define all(x) (x).begin(), (x).end()
#define CST(x) cout << fixed << setprecision(x)
using ll = long long;
const ll MOD = 1000000007;
const int inf = 1e9 + 10;
const ll INF = 4e18 + 10;

int calc(vector<int> N, int i, int j, int k) {
    return N.at(0) + pow(-1, i) * N.at(1) + pow(-1, j) * N.at(2)+pow(-1, k) * N.at(3);
}

void prt(vector<int> N, vector<int> P) {
    cout << N.at(0);
    rep(i, 3) {
        if (P.at(i) % 2 == 0) cout << "+"; else cout << "-";
        cout << N.at(i + 1);
    }
    cout << "=7" << endl;
}

int main() {
    cin.tie(0);
    cout.tie(0);
    ios_base::sync_with_stdio(false);
    
    string S;
    cin >> S;
    vector<int> N(4);
    rep(i, 4) N.at(i) = S.at(i) - 48;
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            for (int k =0; k < 2; k++) {
                vector<int> parity = {i, j, k};
                if (calc(N, i, j, k) == 7) {
                    prt(N, parity);
                    return 0;
                }
            }
        }
    }
    return 0;
}

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <random>
#include <chrono>
#include <tuple>
#include <random>

using namespace std;

typedef long long ll;
typedef long double ld;
#define fastInp cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);

const ll SIZE = 1e6 * 2 + 10, INF = INT64_MAX;

ll dp[100], bstX[35000][20], bstY[35000][20];

vector<vector<ll>> gr, psh;
vector<set<ll>> s;

ll gcd(ll a, ll b) {
	if (b == 0)
		return a;
	else
		return gcd(b, a % b);
}

set<ll> ss;

void debug() {
	debug();
}

vector<ll> vec;

bool solve() {
	vector<ll> pr, suf;
	pr.push_back(0);
	suf.push_back(0);
	ll cnt = 0, val = 0, s = 0;
	for (int i = 0; i < vec.size(); i++) {
		if (vec[i] != 1) {
			cnt++;
			val = vec[i];
		}
		pr.push_back(gcd(pr.back(), vec[i]));
		s += vec[i] - 1;
	}

	if (cnt == 0) return false;
	if (cnt == 1 && val == 2) return true;
	for (int i = vec.size() - 1; i >= 0; i--) {
		suf.push_back(gcd(suf.back(), vec[i]));
	}

	reverse(suf.begin(), suf.end());

	for (int i = 0; i < vec.size(); i++) {
		if (vec[i] == 1) continue;
		ll g = gcd(pr[i], suf[i + 1]);
		g = gcd(g, vec[i] - 1);
		if (g != 1) {
			vec[i]--;
			for (int j = 0; j < vec.size(); j++) {
				vec[j] /= g;
			}
			bool k = solve();
			for (int j = 0; j < vec.size(); j++) {
				vec[j] *= g;
			}
			vec[i]++;
			if (!k) return true;
		}
	}

	if (s % 2 == 0) {
		return false;
	}
	else {
		return true;
	}
}

int main()
{
	fastInp;

	ll n;
	cin >> n;

	vec.resize(n);

	ll s = 0;
	for (int i = 0; i < n; i++) {
		cin >> vec[i];
		s += vec[i] - 1;
	}
	
	if (n % 2 == 0) {
		if (s % 2 == 0) {
			cout << "Second";
		}
		else {
			cout << "First";
		}
	}
	else {
		if (s % 2 == 0) {
			if (solve()) {
				cout << "First";
			}
			else {
				cout << "Second";
			}
		}
		else {
			cout << "First";
		}
	}

	return 0;
}