#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int n;
  cin >> n;
  vector<string> s(n);
  map<string, int> sub;
  map<string, vector<int>> dp;
  for (auto& i : s) {
    cin >> i;
  }
  for (auto i : s) {
    set<string> st;
    for (int j = 0; j < i.length(); j++) {
      for (int k = 1; j + k <= i.length(); k++) {
        st.insert(i.substr(j, k));
      }
    }
    for (auto i : st) {
      sub[i]++;
    }
  }
  function<vector<int>(string)> dfs = [&](string x) -> vector<int> {
    if (dp.count(x)) {
      return dp[x];
    }
    vector<int> res = {0, 0, 0};
    for (int op = 0; op < 2; op++) {
      for (char c = 'a'; c <= 'z'; c++) {
        string y;
        if (!op) {
          y = c + x;
        } else {
          y = x + c;
        }
        if (sub.count(y)) {
          int score = sub[y];
          int sum = 0, maxc = 0;
          for (auto d : y) {
            int now = d - 'a' + 1;
            sum += now;
            maxc = max(maxc, now);
          }
          score += sum * maxc;
          auto nxt = dfs(y);
          nxt[0] ^= 1;
          swap(nxt[1], nxt[2]);
          nxt[1] += score;
          if (nxt[0] > res[0]) {
            res = nxt;
          } else if (nxt[0] == res[0]) {
            if (nxt[1] > res[1]) {
              res = nxt;
            } else if (nxt[1] == res[1] && nxt[2] < res[2]) {
              res = nxt;
            }
          }
        }
      }
    }
    return dp[x] = res;
  };
  auto res = dfs("");
  cout << (res[0] ? "First" : "Second") << '\n';
  cout << res[1] << ' ' << res[2];
  return 0;
}
