#include <bits/stdc++.h>
using namespace std;
int n;
const int INF = 1000000000;
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n;
  vector<string> a(n);
  for (int i = 0; i < n; ++i) cin >> a[i];
  vector<set<string> > pod(n);
  vector<string> pod2;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < a[i].size(); ++j) {
      string p = "";
      pod2.push_back(p);
      for (int k = j; k < a[i].size(); ++k) {
        p += a[i][k];
        pod[i].insert(p);
        pod2.push_back(p);
      }
    }
  }
  map<string, int> score;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < a[i].size(); ++j) {
      string p = "";
      for (int k = j; k < a[i].size(); ++k) {
        p += a[i][k];
        int a = 0, b = -INF;
        for (int l = 0; l < p.size(); ++l) {
          a += p[l] - 'a' + 1;
          b = max(b, p[l] - 'a' + 1);
        }
        int c = 0;
        for (int l = 0; l < n; ++l)
          if (pod[l].find(p) != pod[l].end()) ++c;
        score[p] = a * b + c;
      }
    }
  }
  set<pair<string, string> > kraw;
  map<string, vector<string> > G;
  map<string, int> st_we;
  for (int i = 0; i < n; ++i) {
    queue<string> Q;
    Q.push(a[i]);
    while (!Q.empty()) {
      string akt = Q.front();
      Q.pop();
      if (akt.size() == 0) break;
      string nast = akt;
      nast.erase(nast.size() - 1, 1);
      if (kraw.find(make_pair(nast, akt)) == kraw.end()) {
        kraw.insert(make_pair(nast, akt));
        if (st_we.find(akt) == st_we.end())
          st_we[akt] = 1;
        else
          ++st_we[akt];
        G[nast].push_back(akt);
        Q.push(nast);
      }
      nast = akt;
      nast.erase(0, 1);
      if (kraw.find(make_pair(nast, akt)) == kraw.end()) {
        kraw.insert(make_pair(nast, akt));
        if (st_we.find(akt) == st_we.end())
          st_we[akt] = 1;
        else
          ++st_we[akt];
        G[nast].push_back(akt);
        Q.push(nast);
      }
    }
  }
  queue<string> Q;
  for (int i = 0; i < pod2.size(); ++i)
    if (st_we.find(pod2[i]) == st_we.end()) Q.push(pod2[i]);
  vector<string> topo;
  while (!Q.empty()) {
    string akt = Q.front();
    Q.pop();
    topo.push_back(akt);
    for (int i = 0; i < G[akt].size(); ++i) {
      --st_we[G[akt][i]];
      if (st_we[G[akt][i]] == 0) Q.push(G[akt][i]);
    }
  }
  reverse(topo.begin(), topo.end());
  map<string, pair<bool, pair<int, int> > > win;
  for (int i = 0; i < topo.size(); ++i) {
    if (G[topo[i]].size() == 0)
      win[topo[i]] = make_pair(false, make_pair(0, 0));
    else {
      bool wyn = false;
      for (int j = 0; j < G[topo[i]].size(); ++j)
        if (!win[G[topo[i]][j]].first) wyn = true;
      if (wyn) {
        int a = -INF, b = INF;
        for (int j = 0; j < G[topo[i]].size(); ++j) {
          if (!win[G[topo[i]][j]].first) {
            if (a < score[G[topo[i]][j]] + win[G[topo[i]][j]].second.second ||
                (a == score[G[topo[i]][j]] + win[G[topo[i]][j]].second.second &&
                 b > win[G[topo[i]][j]].second.first)) {
              a = score[G[topo[i]][j]] + win[G[topo[i]][j]].second.second;
              b = win[G[topo[i]][j]].second.first;
            }
          }
        }
        win[topo[i]] = make_pair(wyn, make_pair(a, b));
      } else {
        int a = -INF, b = INF;
        for (int j = 0; j < G[topo[i]].size(); ++j) {
          if (a < score[G[topo[i]][j]] + win[G[topo[i]][j]].second.second ||
              (a == score[G[topo[i]][j]] + win[G[topo[i]][j]].second.second &&
               b > win[G[topo[i]][j]].second.first)) {
            a = score[G[topo[i]][j]] + win[G[topo[i]][j]].second.second;
            b = win[G[topo[i]][j]].second.first;
          }
        }
        win[topo[i]] = make_pair(wyn, make_pair(a, b));
      }
    }
  }
  if (win[""].first)
    cout << "First" << endl;
  else
    cout << "Second" << endl;
  cout << win[""].second.first << " " << win[""].second.second;
  return 0;
}
