#include <bits/stdc++.h>
using namespace std;
const int Z = 67, N = 50005;
map<long long, int> M;
map<long long, int> mx;
map<long long, int> sum;
map<long long, string> SS;
long long calc(string s) {
  long long res = 0;
  int _mx = 0, _sum = 0;
  for (int i = 0, sz = s.size(); i < sz; i++) {
    _mx = max(_mx, s[i] - 'a' + 1);
    _sum += s[i] - 'a' + 1;
    res *= Z;
    res += s[i];
  }
  mx[res] = _mx;
  sum[res] = _sum;
  SS[res] = s;
  return res;
}
map<long long, int> Id;
vector<pair<long long, int> > Val;
vector<int> E[N];
bool vis[N];
pair<int, pair<int, int> > F[N];
bool Y[N];
void gao(int id) {
  if (vis[id]) return;
  vis[id] = 1;
  int sz = E[id].size();
  if (sz == 0) {
    F[id].first = 0;
    F[id].second = make_pair(0, 0);
    Y[id] = false;
    return;
  }
  for (int i = 0; i < sz; i++) {
    gao(E[id][i]);
  }
  F[id].first = -1e9;
  F[id].second.first = 0;
  F[id].second.second = 1e9;
  Y[id] = false;
  for (int i = 0; i < sz; i++) {
    int u = E[id][i];
    int val = F[u].first;
    long long sval = Val[u].first;
    int score = sum[sval] * mx[sval] + Val[u].second;
    if (Y[u] == false) Y[id] = true;
    if ((score - val < 0 && F[id].first >= 0)) continue;
    if ((score - val == 0 && F[id].first > 0)) continue;
    if ((score - val > 0 && F[id].first <= 0) ||
        (score - val == 0 && F[id].first < 0)) {
      F[id].first = score - val;
      F[id].second = make_pair(score + F[u].second.second, F[u].second.first);
    } else {
      int f1 = score + F[u].second.second;
      int f2 = F[u].second.first;
      if (f1 > F[id].second.first ||
          (f1 == F[id].second.first && f2 < F[id].second.second)) {
        F[id].first = score - val;
        F[id].second = make_pair(f1, f2);
      }
    }
  }
}
int main() {
  int n;
  while (cin >> n) {
    M.clear();
    mx.clear();
    sum.clear();
    SS.clear();
    for (int i = 0; i < n; i++) {
      string s;
      cin >> s;
      int len = s.size();
      map<long long, bool> T;
      for (int i = 0; i < len; i++) {
        for (int j = 1; j <= len - i; j++) {
          T[calc(s.substr(i, j))] = 1;
        }
      }
      for (map<long long, bool>::iterator it = T.begin(); it != T.end(); ++it) {
        M[(*it).first]++;
      }
    }
    Id.clear();
    Val.clear();
    int m = 0;
    M[0] = 0;
    for (map<long long, int>::iterator it = M.begin(); it != M.end(); ++it) {
      Id[(*it).first] = m++;
      Val.push_back((*it));
    }
    for (int i = 0; i < m; i++) E[i].clear();
    queue<pair<long long, long long> > Q;
    memset(vis, 0, sizeof vis);
    Q.push(make_pair(0, 1));
    vis[Id[0]] = 1;
    while (!Q.empty()) {
      pair<long long, long long> u = Q.front();
      Q.pop();
      for (int i = 'a'; i <= 'z'; i++) {
        for (int j = 0; j < 2; j++) {
          long long v;
          if (j)
            v = u.first * Z + i;
          else
            v = u.first + i * u.second;
          if (M[v]) {
            E[Id[u.first]].push_back(Id[v]);
            if (!vis[Id[v]]) {
              vis[Id[v]] = true;
              Q.push(make_pair(v, u.second * Z));
            }
          }
        }
      }
    }
    memset(vis, 0, sizeof vis);
    for (map<long long, string>::iterator it = SS.begin(); it != SS.end();
         ++it) {
    }
    gao(Id[0]);
    if (Y[Id[0]]) {
      cout << "First" << endl;
    } else
      cout << "Second" << endl;
    cout << F[Id[0]].second.first << ' ' << F[Id[0]].second.second << endl;
  }
  return 0;
}
