Once Petya and Vasya invented a new game and called it "Smart Boy". They located a certain set of words — the dictionary — for the game. It is admissible for the dictionary to contain similar words. 

The rules of the game are as follows: first the first player chooses any letter (a word as long as 1) from any word from the dictionary and writes it down on a piece of paper. The second player adds some other letter to this one's initial or final position, thus making a word as long as 2, then it's the first player's turn again, he adds a letter in the beginning or in the end thus making a word as long as 3 and so on. But the player mustn't break one condition: the newly created word must be a substring of a word from a dictionary. The player who can't add a letter to the current word without breaking the condition loses.

Also if by the end of a turn a certain string s is written on paper, then the player, whose turn it just has been, gets a number of points according to the formula:

<image>

where 

  * <image> is a sequence number of symbol c in Latin alphabet, numbered starting from 1. For example, <image>, and <image>. 
  * <image> is the number of words from the dictionary where the line s occurs as a substring at least once. 



Your task is to learn who will win the game and what the final score will be. Every player plays optimally and most of all tries to win, then — to maximize the number of his points, then — to minimize the number of the points of the opponent.

Input

The first input line contains an integer n which is the number of words in the located dictionary (1 ≤ n ≤ 30). The n lines contain the words from the dictionary — one word is written on one line. Those lines are nonempty, consisting of Latin lower-case characters no longer than 30 characters. Equal words can be in the list of words.

Output

On the first output line print a line "First" or "Second" which means who will win the game. On the second line output the number of points of the first player and the number of points of the second player after the game ends. Separate the numbers by a single space.

Examples

Input

2
aba
abac


Output

Second
29 35


Input

3
artem
nik
max


Output

First
2403 1882
#include <bits/stdc++.h>
using namespace std;
const int INF = 1 << 29;
const int xam = 100010;
int n, m;
string str[xam];
map<string, int> M;
vector<int> graf[xam];
pair<int, pair<int, int> > prize[xam];
vector<int> lisc;
vector<int> sorts[40];
string dane[40];
bool num[xam][40];
void set_ans() {
  bool bol = 0;
  for (typeof((sorts[1]).begin()) it = (sorts[1]).begin();
       it != (sorts[1]).end(); it++) {
    if (prize[*it].first == 1) {
      bol = 1;
      break;
    }
  }
  if (bol) {
    cout << "First\n";
    int maxi = 0, mini = INF;
    for (typeof((sorts[1]).begin()) it = (sorts[1]).begin();
         it != (sorts[1]).end(); it++) {
      if (prize[*it].first == 0) continue;
      if (prize[*it].second.first > maxi) {
        maxi = prize[*it].second.first;
        mini = prize[*it].second.second;
      } else if (prize[*it].second.first == maxi &&
                 prize[*it].second.second < mini) {
        maxi = prize[*it].second.first;
        mini = prize[*it].second.second;
      }
    }
    cout << maxi << " " << mini << "\n";
  } else {
    cout << "Second\n";
    int maxi = 0, mini = INF;
    for (typeof((sorts[1]).begin()) it = (sorts[1]).begin();
         it != (sorts[1]).end(); it++) {
      if (prize[*it].second.first > maxi) {
        maxi = prize[*it].second.first;
        mini = prize[*it].second.second;
      } else if (prize[*it].second.first == maxi &&
                 prize[*it].second.second < mini) {
        maxi = prize[*it].second.first;
        mini = prize[*it].second.second;
      }
    }
    cout << maxi << ' ' << mini << '\n';
  }
}
pair<int, pair<int, int> > set_prize(int a) {
  int mini = INF, maxi = 0;
  bool bol[2] = {0, 0};
  for (typeof((graf[a]).begin()) it = (graf[a]).begin(); it != (graf[a]).end();
       it++) {
    bol[prize[*it].first] = 1;
  }
  if (bol[1] == 1) {
    for (typeof((graf[a]).begin()) it = (graf[a]).begin();
         it != (graf[a]).end(); it++) {
      if (prize[*it].first == 0) continue;
      if (prize[*it].second.first > maxi) {
        maxi = prize[*it].second.first;
        mini = prize[*it].second.second;
      } else if (prize[*it].second.first == maxi &&
                 prize[*it].second.second < mini) {
        maxi = prize[*it].second.first;
        mini = prize[*it].second.second;
      }
    }
    return make_pair(0, make_pair(mini + prize[a].second.first, maxi));
  } else {
    for (typeof((graf[a]).begin()) it = (graf[a]).begin();
         it != (graf[a]).end(); it++) {
      if (prize[*it].second.first > maxi) {
        maxi = prize[*it].second.first;
        mini = prize[*it].second.second;
      } else if (prize[*it].second.first == maxi &&
                 prize[*it].second.second < mini) {
        maxi = prize[*it].second.first;
        mini = prize[*it].second.second;
      }
    }
    return make_pair(1, make_pair(mini + prize[a].second.first, maxi));
  }
}
void set_wyn() {
  for (int i = 39; i > 0; i--) {
    for (typeof((sorts[i]).begin()) it = (sorts[i]).begin();
         it != (sorts[i]).end(); it++) {
      if (prize[*it].first == -1) prize[*it] = set_prize(*it);
    }
  }
}
int score(string &s, int a) {
  int wyn = 0, maxi = 0;
  for (typeof((s).begin()) it = (s).begin(); it != (s).end(); it++) {
    maxi = max(maxi, (*it) - 'a' + 1);
    wyn += (*it - 'a' + 1);
  }
  wyn *= maxi;
  for (int i = 0; i < (n); i++) wyn += num[a][i];
  return wyn;
}
void set_sorts() {
  for (int i = 1; i <= (m); i++) {
    sorts[str[i].size()].push_back(i);
  }
  for (int i = 1; i <= (m); i++) prize[i].first = -1;
  for (int i = 1; i <= (m); i++) {
    prize[i] = make_pair(-1, make_pair(score(str[i], i), 0));
    if (!graf[i].size()) prize[i].first = 1;
  }
}
void set_graf() {
  string temp;
  map<string, int>::iterator p;
  for (int i = 1; i <= (m); i++) {
    temp = string("a") + str[i];
    for (int j = 'a'; j <= 'z'; j++) {
      temp[0] = j;
      p = M.find(temp);
      if (p == M.end()) continue;
      graf[i].push_back(p->second);
    }
    temp = str[i] + string("a");
    for (int j = 'a'; j <= 'z'; j++) {
      temp[temp.size() - 1] = j;
      p = M.find(temp);
      if (p == M.end()) continue;
      graf[i].push_back(p->second);
    }
  }
}
void read() {
  string temp;
  map<string, int>::iterator p;
  cin >> n;
  for (int i = 0; i < (n); i++) {
    cin >> dane[i];
    for (int j = 1; j <= (dane[i].size()); j++) {
      for (int l = 0; l < (dane[i].size() - j + 1); l++) {
        temp = dane[i].substr(l, j);
        p = M.find(temp);
        if (p == M.end()) {
          m++;
          M[temp] = m;
          str[m] = temp;
          num[m][i] = 1;
        } else
          num[p->second][i] = 1;
      }
    }
  }
}
int main() {
  read();
  set_graf();
  set_sorts();
  set_wyn();
  set_ans();
  return 0;
}
