#include <bits/stdc++.h>
using namespace std;
void solve();
int main() {
  ios::sync_with_stdio(0);
  solve();
  return 0;
}
map<string, int> subs;
struct Result {
  int win;
  long long pw, pl;
  Result(int win = 0, long long pw = 0LL, long long pl = 0LL)
      : win(win), pw(pw), pl(pl) {}
};
map<string, Result> memo;
Result go(string s, int turn, int curSum, int curM) {
  map<string, Result>::iterator mit = memo.find(s);
  if (mit != memo.end()) {
    if (mit->second.win == turn)
      return mit->second;
    else
      return Result(1 - turn, mit->second.pw, mit->second.pl);
  }
  bool terminal = true;
  long long p1w = -1, p2w = 100000000000000LL;
  long long p1l = -1, p2l = 100000000000000LL;
  string old = s;
  s.push_back('a');
  for (char ch = 'a'; ch <= 'z'; ch++) {
    s[(int)((s).size()) - 1] = ch;
    map<string, int>::iterator it = subs.find(s);
    if (it != subs.end()) {
      terminal = false;
      int sum = curSum + ch - 'a' + 1;
      int m = max(curM, ch - 'a' + 1);
      Result r = go(s, 1 - turn, sum, m);
      if (r.win == turn) {
        long long add = (long long)sum * m + it->second + r.pw;
        if (p1w < add) {
          p1w = add;
          p2w = r.pl;
        } else if (p1w == add) {
          p2w = min(p2w, r.pl);
        }
      } else {
        long long add = (long long)sum * m + it->second + r.pl;
        if (p1l < add) {
          p1l = add;
          p2l = r.pw;
        } else if (p1l == add) {
          p2l = min(p2l, r.pw);
        }
      }
    }
  }
  s = "a" + old;
  for (char ch = 'a'; ch <= 'z'; ch++) {
    s[0] = ch;
    map<string, int>::iterator it = subs.find(s);
    if (it != subs.end()) {
      terminal = false;
      int sum = curSum + ch - 'a' + 1;
      int m = max(curM, ch - 'a' + 1);
      Result r = go(s, 1 - turn, sum, m);
      if (r.win == turn) {
        long long add = (long long)sum * m + it->second + r.pw;
        if (p1w < add) {
          p1w = add;
          p2w = r.pl;
        } else if (p1w == add) {
          p2w = min(p2w, r.pl);
        }
      } else {
        long long add = (long long)sum * m + it->second + r.pl;
        if (p1l < add) {
          p1l = add;
          p2l = r.pw;
        } else if (p1l == add) {
          p2l = min(p2l, r.pw);
        }
      }
    }
  }
  if (terminal) {
    memo[old] = Result(1 - turn, 0, 0);
    return Result(1 - turn, 0, 0);
  }
  if (p1w != -1) {
    memo[old] = Result(turn, p1w, p2w);
    return Result(turn, p1w, p2w);
  } else {
    memo[old] = Result(1 - turn, p2l, p1l);
    return Result(1 - turn, p2l, p1l);
  }
}
void solve() {
  int n;
  vector<string> dict;
  vector<set<string> > ds;
  cin >> n;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    dict.push_back(s);
    ds.push_back(set<string>());
  }
  for (int i = 0; i < n; i++) {
    string& s = dict[i];
    set<string>& ss = ds[i];
    for (int j = 0; j < (int)((s).size()); j++) {
      for (int k = j + 1; k < (int)((s).size()) + 1; k++) {
        string z = s.substr(j, k - j);
        subs[z] = 0;
        ss.insert(z);
      }
    }
  }
  for (map<string, int>::iterator it = subs.begin(); it != subs.end(); it++) {
    int cnt = 0;
    for (int i = 0; i < n; i++) {
      string& s = dict[i];
      if (ds[i].find(it->first) != ds[i].end()) ++cnt;
    }
    it->second = cnt;
  }
  Result r = go("", 0, 0, 0);
  if (r.win == 0) {
    cout << "First\n";
    cout << r.pw << ' ' << r.pl << '\n';
  } else {
    cout << "Second\n";
    cout << r.pl << ' ' << r.pw << '\n';
  }
}
