#include <bits/stdc++.h>
using namespace std;
map<string, int> globmap;
int optwin[32000];
int optptsc[32000];
int optptso[32000];
int pts[32000];
map<string, int> hashid;
string hashinv[32000];
void findit(int s) {
  if (optwin[s] != -1) {
    return;
  }
  string S = hashinv[s];
  string append = "z";
  optwin[s] = 0;
  optptsc[s] = 0;
  optptso[s] = 1000000000;
  bool can = 0;
  for (int c = 'a'; c <= 'z'; c++) {
    append[0] = c;
    string Snext;
    for (int b = 0; b < 2; b++) {
      if (b)
        Snext = S + append;
      else
        Snext = append + S;
      if (hashid.find(Snext) == hashid.end()) continue;
      can = 1;
      int snext = hashid[Snext];
      findit(snext);
      int candwin = !optwin[snext];
      int candptsc = pts[snext] + optptso[snext];
      int candptso = optptsc[snext];
      if (candwin < optwin[s]) continue;
      if (candwin > optwin[s]) {
        optwin[s] = candwin;
        optptsc[s] = candptsc;
        optptso[s] = candptso;
        continue;
      }
      if (candptsc < optptsc[s]) continue;
      if (candptsc > optptsc[s]) {
        optwin[s] = candwin;
        optptsc[s] = candptsc;
        optptso[s] = candptso;
        continue;
      }
      if (candptso > optptso[s]) continue;
      if (candptso < optptso[s]) {
        optwin[s] = candwin;
        optptsc[s] = candptsc;
        optptso[s] = candptso;
        continue;
      }
    }
  }
  if (!can) {
    optwin[s] = 0;
    optptsc[s] = 0;
    optptso[s] = 0;
  }
}
int main() {
  int n;
  scanf("%d", &n);
  map<string, int> globmap;
  for (int i = 0; i < n; i++) {
    string word;
    cin >> word;
    map<string, bool> allsubs;
    int L = word.size();
    for (int i = 0; i < L; i++)
      for (int j = i; j < L; j++) allsubs[word.substr(i, j - i + 1)] = 1;
    for (map<string, bool>::iterator it = allsubs.begin(); it != allsubs.end();
         it++) {
      string S = (*it).first;
      if (globmap.find(S) == globmap.end())
        globmap[S] = 1;
      else
        globmap[S]++;
    }
  }
  int ct = 0;
  for (map<string, int>::iterator it = globmap.begin(); it != globmap.end();
       it++) {
    string S = (*it).first;
    int L = S.size();
    int maxx = 0;
    int summ = 0;
    for (int i = 0; i < L; i++) {
      summ += S[i] - 'a' + 1;
      if (S[i] - 'a' + 1 > maxx) maxx = S[i] - 'a' + 1;
    }
    (*it).second += summ * maxx;
    hashid[S] = ct + 1;
    hashinv[ct + 1] = S;
    pts[ct + 1] = (*it).second;
    ct++;
  }
  hashid[""] = 0;
  hashinv[0] = "";
  pts[0] = 0;
  ct++;
  for (int i = 0; i < ct; i++) {
    optwin[i] = -1;
    optptsc[i] = -1;
    optptso[i] = -1;
  }
  findit(0);
  if (optwin[0])
    printf("First\n");
  else
    printf("Second\n");
  printf("%d %d\n", optptsc[0], optptso[0]);
}
