#include <bits/stdc++.h>
using namespace std;
struct state {
  bool b;
  int f, s;
  state() {}
};
map<string, int> cnt[44];
map<string, int> score[44];
map<string, state> mem;
int calc_score(string s) {
  int sz = s.size();
  int mx = 0;
  int total = 0;
  for (int i = 0; i < sz; i++) {
    total += s[i] - 'a' + 1;
    mx = max(mx, s[i] - 'a' + 1);
  }
  total *= mx;
  total += cnt[sz][s];
  score[sz][s] = total;
  return total;
}
state bt(string &s) {
  map<string, state>::iterator inter = mem.find(s);
  if (inter != mem.end()) return inter->second;
  string aux1, aux2;
  int sz = s.size();
  int moves = 0;
  vector<state> all(0);
  for (char c = 'a'; c <= 'z'; c++) {
    aux1 = s + c;
    aux2 = c + s;
    if (cnt[sz + 1][aux1]) {
      moves++;
      all.push_back(bt(aux1));
    }
    if (sz > 0 && cnt[sz + 1][aux2]) {
      moves++;
      all.push_back(bt(aux2));
    }
  }
  state ret;
  if (moves == 0) {
    ret.b = false;
    ret.f = 0;
    ret.s = 0;
    if (sz & 1)
      ret.f = score[sz][s];
    else
      ret.s = score[sz][s];
    mem[s] = ret;
    return ret;
  }
  bool win = false;
  for (int i = 0; i < ((int)(all).size()) && !win; i++)
    win = win || all[i].b == false;
  int fir = -1, sec = -1;
  if (win && (sz & 1)) {
    for (int i = 0; i < ((int)(all).size()); i++)
      if (!all[i].b)
        if (sec < all[i].s || (sec == all[i].s && fir > all[i].f)) {
          fir = all[i].f;
          sec = all[i].s;
        }
  } else if (win && !(sz & 1)) {
    for (int i = 0; i < ((int)(all).size()); i++)
      if (!all[i].b)
        if (fir < all[i].f || (fir == all[i].f && sec > all[i].s)) {
          fir = all[i].f;
          sec = all[i].s;
        }
  } else if (!win && (sz & 1)) {
    for (int i = 0; i < ((int)(all).size()); i++)
      if (all[i].b)
        if (sec < all[i].s || (sec == all[i].s && fir > all[i].f)) {
          fir = all[i].f;
          sec = all[i].s;
        }
  } else {
    for (int i = 0; i < ((int)(all).size()); i++)
      if (all[i].b)
        if (fir < all[i].f || (fir == all[i].f && sec > all[i].s)) {
          fir = all[i].f;
          sec = all[i].s;
        }
  }
  ret.b = win;
  ret.f = fir;
  ret.s = sec;
  if (sz & 1)
    ret.f += score[sz][s];
  else
    ret.s += score[sz][s];
  mem[s] = ret;
  return ret;
}
int main() {
  int n;
  cin >> n;
  string s;
  map<string, bool> found;
  for (int i = 0; i < n; i++) {
    cin >> s;
    found.clear();
    for (int k = 0; k < s.size(); k++) {
      string aux = "";
      for (int j = 0; k + j < s.size(); j++) {
        aux += s[k + j];
        if (found.find(aux) == found.end()) {
          cnt[aux.size()][aux]++;
          found[aux] = true;
        }
      }
    }
  }
  for (int i = 1; i <= 30; i++) {
    for (map<string, int>::iterator j = cnt[i].begin(); j != cnt[i].end();
         j++) {
      score[i][j->first] = calc_score(j->first);
    }
  }
  string init = "";
  state ret = bt(init);
  if (ret.b) {
    cout << "First" << endl;
    cout << ret.f << " " << ret.s << endl;
  } else {
    cout << "Second" << endl;
    cout << ret.f << " " << ret.s << endl;
  }
  return 0;
}
