#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-7;
const double PI = 2 * acos(0.0);
using namespace std;
const int MAX = (1LL << (18));
class _node {
 public:
  int win, s0, s1;
  _node() { win = false, s0 = 0, s1 = INT_MAX; }
};
map<string, _node> res;
map<string, int> num;
_node GetMax(_node a, _node b) {
  if (a.win != b.win) return a.win ? a : b;
  if (a.s0 == b.s0) return a.s1 < b.s1 ? a : b;
  return a.s0 > b.s0 ? a : b;
}
_node go(string str, int sum, int maxId) {
  if (res.find(str) != res.end()) return res[str];
  _node rt;
  for (char i = 'a'; i <= 'z'; i++) {
    int tmp = num[i + str];
    sum++;
    maxId = max(i - 'a' + 1, maxId);
    if (tmp != 0) {
      _node t = go(i + str, sum, maxId);
      swap(t.s1, t.s0);
      t.s0 += maxId * sum + tmp;
      t.win = !t.win;
      rt = GetMax(t, rt);
    }
    tmp = num[str + i];
    if (tmp != 0) {
      _node t = go(str + i, sum, maxId);
      swap(t.s1, t.s0);
      t.s0 += maxId * sum + tmp;
      t.win = !t.win;
      rt = GetMax(t, rt);
    }
  }
  if (rt.s1 == INT_MAX) rt.s1 = 0;
  return res[str] = rt;
}
int main() {
  int n;
  cin >> n;
  while (n--) {
    set<string> exist;
    string str;
    cin >> str;
    for (int i = 0; i < str.length(); i++)
      for (int j = i + 1; j <= str.length(); j++) {
        string tmp = str.substr(i, j - i);
        if (exist.find(tmp) == exist.end()) {
          num[tmp]++;
          exist.insert(tmp);
        }
      }
  }
  _node rt = go("", 0, 0);
  if (rt.win)
    cout << "First" << endl;
  else
    cout << "Second" << endl;
  cout << rt.s0 << " " << rt.s1 << endl;
  return 0;
}
