#include <bits/stdc++.h>
using namespace std;
struct Point {
  int x;
  int y;
  Point(int x_, int y_) : x(x_), y(y_) {}
};
template <class T>
T sqr(const T& t) {
  return t * t;
}
template <class T>
T abs(const T& t) {
  return ((t > 0) ? (t) : (-t));
}
void initialize() {
  freopen("_.in", "r", stdin);
  freopen("_.out", "w", stdout);
}
const int MAX = 30 + 5;
const int INF = (int)1e9;
int posCount = 0;
map<string, int> positions;
const int NMAX = MAX * MAX * MAX;
vector<int> reb[NMAX];
int freq[NMAX];
int sum[NMAX];
int maxV[NMAX];
vector<int> freqMas[NMAX];
int score[NMAX];
bool solve[NMAX];
bool haveSolve[NMAX];
pair<int, int> resScore[NMAX];
void run(int pos) {
  if (haveSolve[pos]) {
    return;
  }
  solve[pos] = false;
  for (int i = 0; i < reb[pos].size(); ++i) {
    int npos = reb[pos][i];
    run(npos);
    if (!solve[npos]) {
      solve[pos] = true;
    }
  }
  pair<int, int> bestCount = pair<int, int>(0, 0);
  for (int i = 0; i < reb[pos].size(); ++i) {
    int npos = reb[pos][i];
    pair<int, int> ncount = resScore[npos];
    swap(ncount.first, ncount.second);
    ncount.first += score[npos];
    if ((solve[pos] && !solve[npos]) || (!solve[pos])) {
      bestCount.second *= -1;
      ncount.second *= -1;
      bestCount = max(bestCount, ncount);
      bestCount.second *= -1;
      ncount.second *= -1;
    }
  }
  resScore[pos] = bestCount;
  haveSolve[pos] = true;
}
int main() {
  vector<string> sss;
  positions[""] = posCount++;
  int n;
  cin >> n;
  for (int k = 0; k < n; ++k) {
    string s;
    cin >> s;
    sss.push_back(s);
  }
  for (int j = 1; j < MAX; ++j) {
    for (int k = 0; k < sss.size(); ++k) {
      const string& s = sss[k];
      for (int i = 0; i + j <= s.size(); ++i) {
        string ss = s.substr(i, j);
        if (positions.find(ss) == positions.end()) {
          positions[ss] = posCount++;
        }
        int pos = positions[ss];
        freqMas[pos].push_back(k);
        reb[positions[s.substr(i, j - 1)]].push_back(pos);
        reb[positions[s.substr(i + 1, j - 1)]].push_back(pos);
        sum[pos] = sum[positions[s.substr(i + 1, j - 1)]] + (s[i] - 'a' + 1);
        maxV[pos] =
            max(maxV[positions[s.substr(i + 1, j - 1)]], (s[i] - 'a' + 1));
        score[pos] = sum[pos] * maxV[pos];
      }
    }
  }
  for (int i = 0; i < posCount; ++i) {
    sort(freqMas[i].begin(), freqMas[i].end());
    freq[i] = unique(freqMas[i].begin(), freqMas[i].end()) - freqMas[i].begin();
    score[i] += freq[i];
  }
  run(0);
  if (solve[0]) {
    printf("First\n");
  } else {
    printf("Second\n");
  }
  printf("%d %d\n", resScore[0].first, resScore[0].second);
  return 0;
}
