#include <bits/stdc++.h>
using namespace std;
string dic[35];
struct state {
  int idx, st, en, sum, mx;
  bool same;
  state() {}
  state(int pidx, int pst, int pen, int psum, int pmx, bool psame) {
    idx = pidx, st = pst, en = pen, sum = psum, mx = pmx, same = psame;
  }
};
void updateLeft(state &stt, char cur) {
  string &s = dic[stt.idx];
  stt.same = stt.same && s[stt.st] == cur ? 1 : 0;
  stt.st--;
  stt.sum += cur - 'a' + 1;
  stt.mx = max(stt.mx, cur - 'a' + 1);
}
void updateRight(state &stt, char cur) {
  string &s = dic[stt.idx];
  stt.same = stt.same && s[stt.en] == cur ? 1 : 0;
  stt.en++;
  stt.sum += cur - 'a' + 1;
  stt.mx = max(stt.mx, cur - 'a' + 1);
}
int update(char cur, bool isen, vector<state> v, vector<state> &res) {
  set<int> uniq;
  for (int i = 0; i < ((int)(v).size()); i++) {
    string &s = dic[v[i].idx];
    int st = v[i].st, en = v[i].en;
    if (!isen) {
      if (st > 0 && s[st - 1] == cur) {
        updateLeft(v[i], cur);
        uniq.insert(v[i].idx);
        continue;
      }
    } else if (isen) {
      if (en + 1 < ((int)(s).size()) && s[en + 1] == cur) {
        updateRight(v[i], cur);
        uniq.insert(v[i].idx);
        continue;
      }
    }
    if (v[i].same) {
      if (st > 0 && s[st - 1] == cur && s[st] == cur) {
        updateLeft(v[i], cur);
        uniq.insert(v[i].idx);
        continue;
      }
      if (en + 1 < ((int)(s).size()) && s[en + 1] == cur && s[en] == cur) {
        updateRight(v[i], cur);
        uniq.insert(v[i].idx);
        continue;
      }
    }
    v.erase(v.begin() + i);
    --i;
  }
  res = v;
  return uniq.size();
}
pair<int, vector<int> > memo[32][32][32][2];
pair<int, vector<int> > DP(bool turn, vector<state> v) {
  pair<int, vector<int> > &m = memo[v[0].idx][v[0].st][v[0].en][turn];
  if (m.first != -1) return m;
  for (int i = 0; i < ((int)(v).size()); i++) {
    string &s = dic[v[i].idx];
    int st = v[i].st, en = v[i].en;
    vector<state> nxtv[2];
    int num[2] = {-1, -1};
    if (st > 0) num[0] = update(s[st - 1], 0, v, nxtv[0]);
    if (en + 1 < ((int)(s).size())) num[1] = update(s[en + 1], 1, v, nxtv[1]);
    for (int d = 0; d < 2; d++) {
      if (num[d] == -1) continue;
      pair<int, vector<int> > nxt = DP(!turn, nxtv[d]);
      int score = nxtv[d][0].sum * nxtv[d][0].mx + num[d];
      nxt.second[turn] += score;
      if (m.first == -1) {
        m = nxt;
        continue;
      }
      if (m.first == turn && nxt.first != turn) continue;
      if (m.first != turn && nxt.first == turn) {
        m = nxt;
        continue;
      }
      if (nxt.second[turn] > m.second[turn]) {
        m = nxt;
        continue;
      }
      if (nxt.second[turn] == m.second[turn] &&
          nxt.second[!turn] < m.second[!turn]) {
        m = nxt;
        continue;
      }
    }
  }
  if (m.first == -1) m.first = !turn;
  return m;
}
vector<state> mp[300];
set<int> uniq[300];
int main() {
  vector<int> v(2, 0);
  for (int i = 0; i < 32; i++)
    for (int i2 = 0; i2 < 32; i2++)
      for (int i3 = 0; i3 < 32; i3++)
        for (int i4 = 0; i4 < 2; i4++)
          memo[i][i2][i3][i4] = make_pair((-1), (v));
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> dic[i];
    for (int j = 0; j < ((int)(dic[i]).size()); j++) {
      char c = dic[i][j];
      mp[c].push_back(state(i, j, j, c - 'a' + 1, c - 'a' + 1, 1));
      uniq[c].insert(i);
    }
  }
  pair<int, vector<int> > m = make_pair((-1), (v));
  for (int ch = 'a'; ch <= 'z'; ch += 1) {
    if (mp[ch].size() == 0) continue;
    bool turn = 0;
    pair<int, vector<int> > nxt = DP(!turn, mp[ch]);
    int score = mp[ch][0].sum * mp[ch][0].mx + ((int)(uniq[ch]).size());
    nxt.second[turn] += score;
    if (m.first == -1) {
      m = nxt;
      continue;
    }
    if (m.first == turn && nxt.first != turn) continue;
    if (m.first != turn && nxt.first == turn) {
      m = nxt;
      continue;
    }
    if (nxt.second[turn] > m.second[turn]) {
      m = nxt;
      continue;
    }
    if (nxt.second[turn] == m.second[turn] &&
        nxt.second[!turn] < m.second[!turn]) {
      m = nxt;
      continue;
    }
  }
  cout << (m.first == 0 ? "First\n" : "Second\n");
  cout << m.second[0] << " " << m.second[1];
  return 0;
}
