#include <bits/stdc++.h>
using namespace std;
struct ST {
  int f, x, y;
};
int n, i, j, k;
string str;
ST st;
map<string, int> S;
map<string, int> X, Y;
ST M[31][31][31];
bool B[31][31][31];
char A[31][31];
int SZ[31];
bool better(ST st, ST res) {
  if (st.f > res.f) return 1;
  if (st.f < res.f) return 0;
  if (st.x > res.x) return 1;
  if (st.x < res.x) return 0;
  return st.y < res.y;
}
ST solve(int i, int j, int k) {
  ST &res = M[i][j][k], st;
  int p, x, v, mx;
  string str, str2;
  if (!B[i][j][k]) {
    for (p = v = mx = 0, str = ""; p < k; p++) {
      str += A[i][j + p];
      v += A[i][j + p] - 'a' + 1;
      mx = max(mx, A[i][j + p] - 'a' + 1);
    }
    res.f = -1;
    for (p = 'a'; p <= 'z'; p++) {
      str2 = str + (char)p;
      x = __builtin_popcount(S[str2]);
      if (x) {
        st = solve(X[str2], Y[str2], k + 1);
        st.f = 1 - st.f;
        swap(st.x, st.y);
        st.x += (v + p - 'a' + 1) * max(mx, p - 'a' + 1) + x;
        if (res.f == -1) res = st;
        if (better(st, res)) res = st;
      }
      str2 = (char)p + str;
      x = __builtin_popcount(S[str2]);
      if (x) {
        st = solve(X[str2], Y[str2], k + 1);
        st.f = 1 - st.f;
        swap(st.x, st.y);
        st.x += (v + p - 'a' + 1) * max(mx, p - 'a' + 1) + x;
        if (res.f == -1) res = st;
        if (better(st, res)) res = st;
      }
    }
    if (res.f == -1) {
      res.f = 0;
      res.x = 0;
      res.y = 0;
    }
    B[i][j][k] = 1;
  }
  return res;
}
int main() {
  scanf("%d", &n);
  for (i = 0; i < n; i++) {
    scanf("%s", A[i]);
    SZ[i] = strlen(A[i]);
  }
  for (i = 0; i < n; i++)
    for (j = 0; j < SZ[i]; j++)
      for (k = j, str = ""; k < SZ[i]; k++) {
        str += A[i][k];
        S[str] |= 1 << i;
        X[str] = i;
        Y[str] = j;
      }
  st = solve(0, 0, 0);
  printf("%s\n%d %d\n", st.f ? "First" : "Second", st.x, st.y);
  return 0;
}
