#include <bits/stdc++.h>
using namespace std;
const int inf = 2000000000;
int n, dl[40];
string s[40];
map<string, int> S;
map<string, int>::iterator it1;
set<string> rej;
map<string, pair<bool, pair<int, int> > > M;
map<string, pair<bool, pair<int, int> > >::iterator it;
int score(string s) {
  int res = 0, dl = s.length(), maxv = 0;
  for (int i = 0; i < dl; i++) {
    res += s[i] - 'a' + 1;
    maxv = max(maxv, s[i] - 'a' + 1);
  }
  return res * maxv;
}
void process(string s) {
  bool ok = 0;
  int maxv = 0, minv = inf, pom;
  for (char a = 'a'; a <= 'z'; a++) {
    if (S.find(a + s) != S.end()) {
      it = M.find(a + s);
      if (it == M.end()) process(a + s);
      pom = S[a + s];
      it = M.find(a + s);
      if (!it->second.first) {
        if (!ok) {
          ok = 1;
          maxv = it->second.second.second + pom;
          minv = it->second.second.first;
        } else if (it->second.second.second + pom > maxv ||
                   (it->second.second.second + pom == maxv &&
                    it->second.second.first < minv)) {
          maxv = it->second.second.second + pom;
          minv = it->second.second.first;
        }
      } else if (!ok) {
        if (it->second.second.second + pom > maxv ||
            (it->second.second.second + pom == maxv &&
             it->second.second.first < minv)) {
          maxv = it->second.second.second + pom;
          minv = it->second.second.first;
        }
      }
    }
    if (S.find(s + a) != S.end()) {
      it = M.find(s + a);
      if (it == M.end()) process(s + a);
      pom = S[s + a];
      it = M.find(s + a);
      if (!it->second.first) {
        if (!ok) {
          ok = 1;
          maxv = it->second.second.second + pom;
          minv = it->second.second.first;
        } else if (it->second.second.second + pom > maxv ||
                   (it->second.second.second + pom == maxv &&
                    it->second.second.first < minv)) {
          maxv = it->second.second.second + pom;
          minv = it->second.second.first;
        }
      } else if (!ok) {
        if (it->second.second.second + pom > maxv ||
            (it->second.second.second + pom == maxv &&
             it->second.second.first < minv)) {
          maxv = it->second.second.second + pom;
          minv = it->second.second.first;
        }
      }
    }
  }
  if (minv == inf) minv = 0;
  M[s] = make_pair(ok, make_pair(maxv, minv));
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> s[i];
    dl[i] = s[i].length();
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < dl[i]; j++) {
      string s1 = "";
      for (int k = j; k < dl[i]; k++) {
        s1 += s[i][k];
        rej.insert(s1);
      }
    }
    for (set<string>::iterator it = rej.begin(); it != rej.end(); it++) {
      it1 = S.find(*it);
      if (it1 == S.end())
        S[*it] = score(*it) + 1;
      else
        it1->second++;
    }
    rej.clear();
  }
  process("");
  if (M[""].first)
    cout << "First\n";
  else
    cout << "Second\n";
  cout << M[""].second.first << " " << M[""].second.second << "\n";
  return 0;
}
