#include <bits/stdc++.h>
using namespace std;
map<string, int> m;
bool comp(pair<int, pair<int, int> > a, pair<int, pair<int, int> > b) {
  if (a.first != b.first) {
    return a.first && !b.first;
  } else if (a.second.first != b.second.first) {
    return a.second.first > b.second.first;
  } else {
    return a.second.second < b.second.second;
  }
}
int score(string t) {
  int mx = 0, s = 0;
  for (int i = 0; i < t.size(); i++) {
    int v = t[i] - 'a' + 1;
    s += v;
    mx = max(mx, v);
  }
  return s * mx + m[t];
}
map<string, pair<int, pair<int, int> > > mem;
pair<int, pair<int, int> > dfs(string cur, int player) {
  if (mem.find(cur) == mem.end()) {
    bool found = false;
    pair<int, pair<int, int> > best =
        pair<int, pair<int, int> >(false, pair<int, int>(-9999, 0));
    for (int i = 0; i < 2; i++) {
      for (char c = 'a'; c <= 'z'; c++) {
        string nxt;
        if (i == 0) {
          nxt = c + cur;
        } else {
          nxt = cur + c;
        }
        if (m.find(nxt) == m.end()) continue;
        found = true;
        pair<int, pair<int, int> > ret = dfs(nxt, 1 - player);
        ret.first ^= true;
        swap(ret.second.first, ret.second.second);
        ret.second.first += score(nxt);
        if (comp(ret, best)) {
          best = ret;
        }
      }
    }
    if (!found) {
      mem[cur] = pair<int, pair<int, int> >(false, pair<int, int>(0, 0));
    } else {
      mem[cur] = best;
    }
  }
  return mem[cur];
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    set<string> ts;
    for (int j = 0; j < s.size(); j++) {
      for (int k = j + 1; k <= s.size(); k++) {
        ts.insert(s.substr(j, k - j));
      }
    }
    set<string>::iterator it;
    for (it = ts.begin(); it != ts.end(); it++) {
      m[*it]++;
    }
  }
  pair<int, pair<int, int> > t = dfs("", 0);
  cout << (t.first ? "First" : "Second") << endl;
  cout << t.second.first << ' ' << t.second.second << endl;
}
