#include <bits/stdc++.h>
using namespace std;
const int MAXN = 32;
const int MAXSTATES = 20000;
string oriwords[MAXN];
map<string, int> mp;
string statearr[MAXSTATES];
int dp[MAXSTATES][3];
int n, sn;
bool comp(string a, string b) { return a.length() > b.length(); }
int GetScore(string st) {
  int ret = 0, maxc = 0, cnt = 0;
  for (int i = 0; i < st.length(); i++) {
    maxc = max(maxc, st.at(i) - 'a' + 1);
    ret += st.at(i) - 'a' + 1;
  }
  ret *= maxc;
  for (int i = 0; i < n; i++)
    if (oriwords[i].find(st) != string::npos) cnt++;
  ret += cnt;
  return ret;
}
void Update(int *dst, int *src, string st) {
  int score = GetScore(st);
  int len = st.length();
  int tem[3];
  tem[0] = src[0];
  tem[1] = src[1];
  tem[2] = src[2];
  if (len % 2 == 1)
    tem[1] += score;
  else
    tem[2] += score;
  if (dst[0] == -1)
    dst[0] = tem[0], dst[1] = tem[1], dst[2] = tem[2];
  else {
    if (dst[0] != tem[0]) {
      if (len % 2 == 1 && tem[0] == 0 || len % 2 == 0 && tem[0] == 1)
        dst[0] = tem[0], dst[1] = tem[1], dst[2] = tem[2];
    } else {
      if (len % 2 == 1 &&
              (tem[1] > dst[1] || tem[1] == dst[1] && tem[2] < dst[2]) ||
          len % 2 == 0 &&
              (tem[2] > dst[2] || tem[2] == dst[2] && tem[1] < dst[1]))
        dst[0] = tem[0], dst[1] = tem[1], dst[2] = tem[2];
    }
  }
  return;
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) cin >> oriwords[i];
  sn = 0;
  mp[""] = sn++;
  for (int i = 0; i < n; i++) {
    string st = oriwords[i];
    int len = st.length();
    for (int j = 0; j < len; j++)
      for (int k = 1; j + k <= len; k++)
        if (mp.find(st.substr(j, k)) == mp.end()) mp[st.substr(j, k)] = sn++;
  }
  for (map<string, int>::iterator iter = mp.begin(); iter != mp.end(); iter++)
    statearr[iter->second] = iter->first;
  sort(statearr, statearr + sn, comp);
  for (int i = 0; i < sn; i++) mp[statearr[i]] = i;
  for (int i = 0; i < sn; i++) dp[i][0] = -1;
  for (int i = 0; i < n; i++) {
    bool flag = true;
    for (int j = 0; j < n; j++)
      if (j != i && oriwords[j].find(oriwords[i]) != string::npos) {
        flag = false;
        break;
      }
    if (flag) dp[mp[oriwords[i]]][0] = (oriwords[i].length() % 2 == 0);
  }
  for (int i = 0; i < sn - 1; i++) {
    Update(dp[mp[statearr[i].substr(0, statearr[i].length() - 1)]], dp[i],
           statearr[i]);
    Update(dp[mp[statearr[i].substr(1)]], dp[i], statearr[i]);
  }
  if (dp[sn - 1][0] == 0)
    cout << "First" << endl;
  else
    cout << "Second" << endl;
  cout << dp[sn - 1][1] << " " << dp[sn - 1][2] << endl;
  return 0;
}
