#include <bits/stdc++.h>
using namespace std;
const int N = 30000;
const int INF = 1000000000;
map<string, int> lzs;
char str[50];
string s, sub[N];
int num[N], score[N];
int getsum(string sb) {
  int r = 0, i;
  for (i = sb.size() - 1; i >= 0; i--) r += (sb[i] - 'a' + 1);
  return r;
}
int _max(string sb) {
  int r = 0, i;
  for (i = sb.size() - 1; i >= 0; i--)
    if (r < sb[i] - 'a' + 1) r = sb[i] - 'a' + 1;
  return r;
}
int u[N], dp1[N], dp2[N];
void win(int x) {
  if (u[x] != -1) return;
  int r = 0, i, id;
  char c;
  string sb;
  for (i = 0; i < 26; i++) {
    c = 'a' + i;
    sb = sub[x] + c;
    if (lzs.find(sb) != lzs.end()) {
      id = lzs[sb];
      win(id);
      if (!u[id]) r = 1;
    }
    sb = c + sub[x];
    if (lzs.find(sb) != lzs.end()) {
      id = lzs[sb];
      win(id);
      if (!u[id]) r = 1;
    }
  }
  u[x] = r;
}
void work(int x) {
  if (dp1[x] != -1) return;
  int r1 = -INF, r2 = INF, i, k, p, id;
  char c;
  string sb;
  p = -1;
  for (i = 0; i < 26; i++) {
    c = 'a' + i;
    sb = sub[x] + c;
    if (lzs.find(sb) != lzs.end()) {
      id = lzs[sb];
      if (u[x] == 1 && u[id] == 0 || u[x] == 0) {
        work(id);
        if (r1 < score[id] + dp2[id]) {
          r1 = score[id] + dp2[id];
          p = 0;
          k = id;
        } else if (r1 == score[id] + dp2[id]) {
          p = 1;
        }
      }
    }
    sb = c + sub[x];
    if (lzs.find(sb) != lzs.end()) {
      id = lzs[sb];
      if (u[x] == 1 && u[id] == 0 || u[x] == 0) {
        work(id);
        if (r1 < score[id] + dp2[id]) {
          r1 = score[id] + dp2[id];
          p = 0;
          k = id;
        } else if (r1 == score[id] + dp2[id]) {
          p = 1;
        }
      }
    }
  }
  if (p == -1) {
    dp2[x] = 0;
    dp1[x] = 0;
  } else {
    if (p == 0) {
      dp1[x] = r1;
      dp2[x] = dp1[k];
    } else {
      for (i = 0; i < 26; i++) {
        c = 'a' + i;
        sb = sub[x] + c;
        if (lzs.find(sb) != lzs.end()) {
          id = lzs[sb];
          if (u[x] == 1 && u[id] == 0 || u[x] == 0) {
            if (r1 == score[id] + dp2[id]) {
              if (r2 > dp1[id]) r2 = dp1[id];
            }
          }
        }
        sb = c + sub[x];
        if (lzs.find(sb) != lzs.end()) {
          id = lzs[sb];
          if (u[x] == 1 && u[id] == 0 || u[x] == 0) {
            if (r1 == score[id] + dp2[id]) {
              if (r2 > dp1[id]) r2 = dp1[id];
            }
          }
        }
      }
      dp1[x] = r1;
      dp2[x] = r2;
    }
  }
}
int main() {
  int n, i, j, h, len, id, k;
  while (~scanf("%d", &n)) {
    lzs.clear();
    k = 0;
    memset(num, 0, sizeof(num));
    for (i = 0; i < n; i++) {
      memset(u, 0, sizeof(u));
      scanf("%s", str);
      len = strlen(str);
      for (h = 0; h < len; h++) {
        for (s = "", j = h; j < len; j++) {
          s += str[j];
          id = lzs[s];
          if (!id) {
            id = ++k;
            lzs[s] = k;
            sub[k] = s;
          }
          if (!u[id]) num[id]++;
          u[id] = 1;
        }
      }
    }
    for (i = 1; i <= k; i++) {
      score[i] = getsum(sub[i]) * _max(sub[i]) + num[i];
    }
    score[0] = 0;
    sub[0] = "";
    memset(dp1, -1, sizeof(dp1));
    memset(u, -1, sizeof(u));
    win(0);
    if (u[0])
      puts("First");
    else
      puts("Second");
    work(0);
    printf("%d %d\n", dp1[0], dp2[0]);
    getchar();
  }
  return 0;
}
