#include <bits/stdc++.h>
using namespace std;
struct pos {
  int winner;
  long long score[2];
};
vector<string> d;
map<string, long long> cacheNum;
map<string, bool> usedNum;
map<pair<string, int>, pos> recCache;
map<pair<string, int>, bool> usedRec;
map<string, int> nums;
int num(string s) {
  return nums[s];
  if (usedNum[s]) return cacheNum[s];
  usedNum[s] = true;
  long long res = 0;
  for (int _n(((long long)((d).end() - (d).begin())) - 1), i(0); i <= _n; i++) {
    for (int _n(((long long)((d[i]).end() - (d[i]).begin()) -
                 (long long)((s).end() - (s).begin()) + 1) -
                1),
         j(0);
         j <= _n; j++) {
      bool fl = true;
      for (int _n(((long long)((s).end() - (s).begin())) - 1), k(0); k <= _n;
           k++)
        if (s[k] != d[i][j + k]) {
          fl = false;
          break;
        }
      if (fl) {
        res++;
        break;
      }
    }
  }
  return cacheNum[s] = res;
}
long long calc(string s) {
  if (s == "") return 0;
  long long sum = 0;
  for (int _n(((long long)((s).end() - (s).begin())) - 1), i(0); i <= _n; i++)
    sum += s[i] - 'a' + 1;
  long long mx = *max_element((s).begin(), (s).end()) - 'a' + 1;
  return sum * mx + num(s);
}
bool better(pos a, pos b, int who) {
  if (a.winner == who && b.winner != who) return true;
  if (a.winner != who && b.winner == who) return false;
  if (a.score[who] > b.score[who])
    return true;
  else if (a.score[who] == b.score[who])
    if (a.score[1 - who] < b.score[1 - who]) return true;
  return false;
}
pos rec(string s, int who) {
  if (usedRec[make_pair(s, who)]) return recCache[make_pair(s, who)];
  usedRec[make_pair(s, who)] = true;
  vector<pos> v;
  for (char c = 'a'; c <= 'z'; c++) {
    if (num(s + c) > 0) v.push_back(rec(s + c, 1 - who));
    if (num(c + s) > 0) v.push_back(rec(c + s, 1 - who));
  }
  vector<pos> win;
  for (int _n(((long long)((v).end() - (v).begin())) - 1), i(0); i <= _n; i++) {
    v[i].score[who] += calc(s);
  }
  pos res;
  if ((long long)((v).end() - (v).begin()) == 0) {
    res.winner = who;
    res.score[0] = res.score[1] = 0;
    res.score[who] += calc(s);
  } else {
    res = v[0];
  }
  for (int _n(((long long)((v).end() - (v).begin())) - 1), i(0); i <= _n; i++) {
    if (better(v[i], res, 1 - who)) res = v[i];
  }
  return recCache[make_pair(s, who)] = res;
}
int main() {
  int n;
  cin >> n;
  d.resize(n);
  for (int _n((n)-1), i(0); i <= _n; i++) cin >> d[i];
  map<string, int> mw[30];
  for (int _n((n)-1), i(0); i <= _n; i++)
    for (int _n(((long long)((d[i]).end() - (d[i]).begin())) - 1), j(0);
         j <= _n; j++)
      for (int _n(((long long)((d[i]).end() - (d[i]).begin()) - j)), k(1);
           k <= _n; k++)
        mw[i][d[i].substr(j, k)] = 1;
  for (int _n((n)-1), i(0); i <= _n; i++)
    for (map<string, int>::iterator it = mw[i].begin(); it != mw[i].end(); it++)
      nums[it->first]++;
  pos res = rec("", 0);
  if (res.winner == 0)
    cout << "Second" << endl;
  else
    cout << "First" << endl;
  cout << res.score[1] << " " << res.score[0] << endl;
  return 0;
}
