#include <bits/stdc++.h>
using namespace std;
int len[33];
char st[33][33];
map<vector<char>, bool> win, record;
map<vector<char>, int> Q;
map<vector<char>, pair<int, int> > f;
int Rand() { return (rand() << 15) | rand(); }
void DP(vector<char> current) {
  int len = current.size(), i, add;
  pair<int, int> next;
  char flag;
  vector<char> news;
  if (win.find(current) != win.end()) {
    return;
  }
  win[current] = false;
  for (flag = 'a'; flag <= 'z'; flag++) {
    news = current;
    news.push_back(flag);
    if (Q.find(news) != Q.end()) {
      DP(news);
      if (!win[news]) {
        win[current] = true;
        break;
      }
    }
  }
  for (flag = 'a'; flag <= 'z'; flag++) {
    news.clear();
    news.push_back(flag);
    for (i = 0; i < len; i++) {
      news.push_back(current[i]);
    }
    if (Q.find(news) != Q.end()) {
      DP(news);
      if (!win[news]) {
        win[current] = true;
        break;
      }
    }
  }
  for (flag = 'a'; flag <= 'z'; flag++) {
    news = current;
    news.push_back(flag);
    if (Q.find(news) != Q.end()) {
      DP(news);
      if (!win[current]) {
        next = f[news];
        add = Q[news];
        if (next.second + add > f[current].first ||
            next.second + add == f[current].first &&
                next.first < f[current].second) {
          f[current] = make_pair(next.second + add, next.first);
        }
      } else if (!win[news]) {
        next = f[news];
        add = Q[news];
        if (next.second + add > f[current].first ||
            next.second + add == f[current].first &&
                next.first < f[current].second) {
          f[current] = make_pair(next.second + add, next.first);
        }
      }
    }
  }
  for (flag = 'a'; flag <= 'z'; flag++) {
    news.clear();
    news.push_back(flag);
    for (i = 0; i < len; i++) {
      news.push_back(current[i]);
    }
    if (Q.find(news) != Q.end()) {
      DP(news);
      if (!win[current]) {
        next = f[news];
        add = Q[news];
        if (next.second + add > f[current].first ||
            next.second + add == f[current].first &&
                next.first < f[current].second) {
          f[current] = make_pair(next.second + add, next.first);
        }
      } else if (!win[news]) {
        next = f[news];
        add = Q[news];
        if (next.second + add > f[current].first ||
            next.second + add == f[current].first &&
                next.first < f[current].second) {
          f[current] = make_pair(next.second + add, next.first);
        }
      }
    }
  }
  return;
}
int main() {
  int n, i, j, k, maxi, sum, size;
  pair<int, int> answer;
  vector<char> temp, source;
  map<vector<char>, int>::iterator it;
  srand((unsigned)time(0));
  Q.clear();
  source.clear();
  Q[source]++;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%s", st[i] + 1);
    len[i] = strlen(st[i] + 1);
    record.clear();
    for (j = 1; j <= len[i]; j++) {
      temp.clear();
      for (k = j; k <= len[i]; k++) {
        temp.push_back(st[i][k]);
        if (record.find(temp) == record.end()) {
          record[temp] = true;
          Q[temp]++;
        }
      }
    }
  }
  for (it = Q.begin(); it != Q.end(); it++) {
    temp = it->first;
    size = temp.size();
    maxi = sum = 0;
    for (i = 0; i < size; i++) {
      sum += temp[i] - 'a' + 1;
      if (temp[i] - 'a' + 1 > maxi) {
        maxi = temp[i] - 'a' + 1;
      }
    }
    it->second += sum * maxi;
  }
  win.clear();
  f.clear();
  DP(source);
  if (win[source]) {
    printf("First\n");
  } else {
    printf("Second\n");
  }
  answer = f[source];
  printf("%d %d\n", answer.first, answer.second);
  return 0;
}
