#include <bits/stdc++.h>
using namespace std;
struct Node {
  int win, first, second, val;
  Node() {}
  Node(int w, int f, int s, int v) : win(w), first(f), second(s), val(v) {}
} ans;
int n;
map<string, Node> mp;
string word[35];
int calc(string s) {
  if (mp[s].val != -1) return mp[s].val;
  int best = 0, ret = 0;
  for (int i = 0; i < s.length(); ++i) {
    int t = s[i] - 'a' + 1;
    if (t > best) best = t;
    ret += t;
  }
  ret *= best;
  for (int i = 0; i < n; ++i)
    if (word[i].find(s) != string::npos) ++ret;
  return ret;
}
Node dfs(string s) {
  if (mp[s].win != -1) return mp[s];
  Node &ret = mp[s];
  for (char i = 'a'; i <= 'z'; ++i) {
    string ts = i + s;
    if (mp.find(ts) != mp.end()) {
      Node tn = dfs(ts);
      if (tn.win == 0) {
        int tv = tn.second + calc(ts);
        if (ret.win == 1) {
          if (tv > ret.first || tv == ret.first && tn.first < ret.second) {
            ret.first = tv;
            ret.second = tn.first;
          }
        } else {
          ret.win = 1;
          ret.first = tv;
          ret.second = tn.first;
        }
      } else if (ret.win != 1) {
        int tv = tn.second + calc(ts);
        ret.win = 0;
        if (ret.win == -1) {
          ret.first = tv;
          ret.second = tn.first;
        } else {
          if (tv > ret.first || tv == ret.first && tn.first < ret.second) {
            ret.first = tv;
            ret.second = tn.first;
          }
        }
      }
    }
    ts = s + i;
    if (mp.find(ts) != mp.end()) {
      Node tn = dfs(ts);
      if (tn.win == 0) {
        int tv = tn.second + calc(ts);
        if (ret.win == 1) {
          if (tv > ret.first || tv == ret.first && tn.first < ret.second) {
            ret.first = tv;
            ret.second = tn.first;
          }
        } else {
          ret.win = 1;
          ret.first = tv;
          ret.second = tn.first;
        }
      } else if (ret.win != 1) {
        int tv = tn.second + calc(ts);
        ret.win = 0;
        if (ret.win == -1) {
          ret.first = tv;
          ret.second = tn.first;
        } else {
          if (tv > ret.first || tv == ret.first && tn.first < ret.second) {
            ret.first = tv;
            ret.second = tn.first;
          }
        }
      }
    }
  }
  if (ret.win == -1) {
    ret.win = 0;
    ret.first = ret.second = 0;
  }
  return ret;
}
int main() {
  scanf("%d", &n);
  mp[""] = Node(-1, 0, 0, -1);
  for (int i = 0; i < n; ++i) {
    cin >> word[i];
    int len = word[i].length();
    for (int l = 0; l < len; ++l)
      for (int r = l; r < len; ++r) {
        string ts = word[i].substr(l, r - l + 1);
        if (mp.find(ts) == mp.end()) mp[ts] = Node(-1, 0, 0, -1);
      }
  }
  Node ans = dfs("");
  if (ans.win == 1)
    printf("First\n%d %d\n", ans.first, ans.second);
  else
    printf("Second\n%d %d\n", ans.first, ans.second);
  return 0;
}
