#include <bits/stdc++.h>
using namespace std;
const int M = 100004;
unordered_map<string, int> mp;
unordered_set<int> st[M];
vector<int> g[M];
string s[M];
int m = 0;
int getid(string &t) {
  if (mp.count(t))
    return mp[t];
  else {
    s[++m] = t;
    return mp[t] = m;
  }
}
int val[M];
struct P {
  int v, s0, s1;
} sv[M];
P dfs(int u, int p) {
  if (g[u].empty())
    return P{p, 0, 0};
  else if (sv[u].v != -1)
    return sv[u];
  P win = P{-1, -1, -1}, lose = P{-1, -1, -1};
  for (int v : g[u]) {
    P nw = dfs(v, p ^ 1);
    int s0 = nw.s0, s1 = nw.s1;
    if (p == 0) {
      s0 += val[v];
      if (nw.v == 1 && (s0 > win.s0 || s0 == win.s0 && s1 < win.s1))
        win = P{1, s0, s1};
      if (nw.v == 0 && (s0 > lose.s0 || s0 == lose.s0 && s1 < lose.s1))
        lose = P{0, s0, s1};
    } else {
      s1 += val[v];
      if (nw.v == 0 && (s1 > win.s1 || s1 == win.s1 && s0 < win.s0))
        win = P{0, s0, s1};
      if (nw.v == 1 && (s1 > lose.s1 || s1 == lose.s1 && s0 < lose.s0))
        lose = P{1, s0, s1};
    }
  }
  if (win.v != -1)
    return sv[u] = win;
  else
    return sv[u] = lose;
}
int main() {
  int n;
  memset(sv, -1, sizeof(sv));
  cin >> n;
  string t;
  for (int i = 0; i < n; i++) {
    cin >> t;
    for (int j = 0; j < t.size(); j++) {
      string u = "";
      for (int k = j; k < t.size(); k++) {
        u += t[k];
        int x = getid(u);
        st[x].insert(i);
      }
    }
  }
  for (int i = 0; i <= m; i++) {
    for (char ch = 'a'; ch <= 'z'; ch++) {
      string t = s[i] + ch;
      if (mp.count(t)) {
        int x = mp[t];
        g[i].push_back(x);
      }
      t = string("") + ch + s[i];
      if (mp.count(t)) {
        int x = mp[t];
        g[i].push_back(x);
      }
    }
    int sum = 0, mx = 0;
    for (char ch : s[i]) {
      int x = ch - 'a' + 1;
      mx = max(mx, x);
      sum += x;
    }
    val[i] = sum * mx + st[i].size();
  }
  P p = dfs(0, 0);
  puts(p.v ? "First" : "Second");
  printf("%d %d\n", p.s0, p.s1);
}
