Two people play the following string game. Initially the players have got some string s. The players move in turns, the player who cannot make a move loses. 

Before the game began, the string is written on a piece of paper, one letter per cell.

<image> An example of the initial situation at s = "abacaba"

A player's move is the sequence of actions:

  1. The player chooses one of the available pieces of paper with some string written on it. Let's denote it is t. Note that initially, only one piece of paper is available. 
  2. The player chooses in the string t = t1t2... t|t| character in position i (1 ≤ i ≤ |t|) such that for some positive integer l (0 < i - l; i + l ≤ |t|) the following equations hold: ti - 1 = ti + 1, ti - 2 = ti + 2, ..., ti - l = ti + l. 
  3. Player cuts the cell with the chosen character. As a result of the operation, he gets three new pieces of paper, the first one will contain string t1t2... ti - 1, the second one will contain a string consisting of a single character ti, the third one contains string ti + 1ti + 2... t|t|. 

<image> An example of making action (i = 4) with string s = «abacaba»

Your task is to determine the winner provided that both players play optimally well. If the first player wins, find the position of character that is optimal to cut in his first move. If there are multiple positions, print the minimal possible one.

Input

The first line contains string s (1 ≤ |s| ≤ 5000). It is guaranteed that string s only contains lowercase English letters.

Output

If the second player wins, print in the single line "Second" (without the quotes). Otherwise, print in the first line "First" (without the quotes), and in the second line print the minimal possible winning move — integer i (1 ≤ i ≤ |s|).

Examples

Input

abacaba


Output

First
2


Input

abcde


Output

Second

Note

In the first sample the first player has multiple winning moves. But the minimum one is to cut the character in position 2. 

In the second sample the first player has no available moves.
#include <bits/stdc++.h>
#pragma comment(linker, "/stack:20000000")
using namespace std;
template <typename T1, typename T2, typename T3>
struct triple {
  T1 a;
  T2 b;
  T3 c;
  triple(){};
  triple(T1 _a, T2 _b, T3 _c) : a(_a), b(_b), c(_c) {}
};
template <typename T1, typename T2, typename T3>
bool operator<(const triple<T1, T2, T3> &t1, const triple<T1, T2, T3> &t2) {
  if (t1.a != t2.a)
    return t1.a < t2.a;
  else
    return t1.b < t2.b;
}
template <typename T1, typename T2>
inline std::ostream &operator<<(std::ostream &os, const std::pair<T1, T2> &p) {
  return os << "(" << p.first << ", " << p.second << ")";
}
template <typename T>
inline std::ostream &operator<<(std::ostream &os, const std::vector<T> &v) {
  bool first = true;
  os << "[";
  for (unsigned int i = 0; i < v.size(); i++) {
    if (!first) os << ", ";
    os << v[i];
    first = false;
  }
  return os << "]";
}
template <typename T>
inline std::ostream &operator<<(std::ostream &os, const std::set<T> &v) {
  bool first = true;
  os << "[";
  for (typename std::set<T>::const_iterator ii = v.begin(); ii != v.end();
       ++ii) {
    if (!first) os << ", ";
    os << *ii;
    first = false;
  }
  return os << "]";
}
template <typename T1, typename T2>
inline std::ostream &operator<<(std::ostream &os, const std::map<T1, T2> &v) {
  bool first = true;
  os << "[";
  for (typename std::map<T1, T2>::const_iterator ii = v.begin(); ii != v.end();
       ++ii) {
    if (!first) os << ", ";
    os << *ii;
    first = false;
  }
  return os << "]";
}
template <typename T, typename T2>
void printarray(T a[], T2 sz, T2 beg = 0) {
  for (T2 i = beg; i < sz; i++) cout << a[i] << " ";
}
inline long long binpow(long long x, long long n) {
  long long res = 1;
  while (n) {
    if (n & 1) res *= x;
    x *= x;
    n >>= 1;
  }
  return res;
}
inline long long powmod(long long x, long long n, long long _mod) {
  long long res = 1;
  while (n) {
    if (n & 1) res = (res * x) % _mod;
    x = (x * x) % _mod;
    n >>= 1;
  }
  return res;
}
inline long long gcd(long long a, long long b) {
  long long t;
  while (b) {
    a = a % b;
    t = a;
    a = b;
    b = t;
  }
  return a;
}
inline int gcd(int a, int b) {
  int t;
  while (b) {
    a = a % b;
    t = a;
    a = b;
    b = t;
  }
  return a;
}
inline long long lcm(int a, int b) { return a / gcd(a, b) * (long long)b; }
inline long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
inline long long gcd(long long a, long long b, long long c) {
  return gcd(gcd(a, b), c);
}
inline int gcd(int a, int b, int c) { return gcd(gcd(a, b), c); }
inline long long lcm(long long a, long long b, long long c) {
  return lcm(lcm(a, b), c);
}
inline long long lcm(int a, int b, int c) {
  return lcm(lcm(a, b), (long long)c);
}
inline long long max(long long a, long long b) { return (a > b) ? a : b; }
inline int max(int a, int b) { return (a > b) ? a : b; }
inline double max(double a, double b) { return (a > b) ? a : b; }
inline long long max(long long a, long long b, long long c) {
  return max(a, max(b, c));
}
inline int max(int a, int b, int c) { return max(a, max(b, c)); }
inline double max(double a, double b, double c) { return max(a, max(b, c)); }
inline long long min(long long a, long long b) { return (a < b) ? a : b; }
inline int min(int a, int b) { return (a < b) ? a : b; }
inline double min(double a, double b) { return (a < b) ? a : b; }
inline long long min(long long a, long long b, long long c) {
  return min(a, min(b, c));
}
inline int min(int a, int b, int c) { return min(a, min(b, c)); }
inline double min(double a, double b, double c) { return min(a, min(b, c)); }
inline void getar(int *a, int n) {
  for (int ii = 0; ii < n; ii++) {
    scanf("%d", a + ii);
  }
}
inline void getar(long long *a, int n) {
  for (int ii = 0; ii < n; ii++) {
    scanf("%I64", a + ii);
  }
}
const int D = 100;
int mex(const vector<int> &a) {
  static bool used[D + 1] = {0};
  int c = (int)a.size();
  for (int i = 0; i < c; ++i)
    if (a[i] <= D) used[a[i]] = true;
  int result;
  for (int i = 0;; ++i)
    if (!used[i]) {
      result = i;
      break;
    }
  for (int i = 0; i < c; ++i)
    if (a[i] <= D) used[a[i]] = false;
  return result;
}
char s[10001];
int t[50001];
bool e[50001];
int main() {
  cin >> s;
  int n = strlen(s);
  t[0] = 0;
  t[1] = 1;
  t[2] = 1;
  vector<int> v;
  for (int i = 3; i < n; i++) {
    v.clear();
    v.push_back(t[i - 2]);
    for (int j = 1; i - j - 2 >= 0; j++) {
      int x = t[j - 1] ^ t[i - j - 2];
      v.push_back(x);
    }
    t[i] = mex(v);
  }
  for (int i = 1; i < n - 1; i++) {
    e[i] = (s[i - 1] == s[i + 1]);
  }
  int q = 0;
  int res = 0;
  vector<pair<int, int> > a;
  for (int i = 0; i < n; i++) {
    if (!e[i]) {
      if (q > 0) {
        a.push_back(make_pair(q, i - q));
        q = 0;
      }
    } else {
      q++;
    }
  }
  for (int i = 0; i < a.size(); i++) {
    res ^= t[a[i].first];
  }
  if (res == 0) {
    cout << "Second" << endl;
  } else {
    cout << "First" << endl;
    for (int i = 0; i < a.size(); i++) {
      int pos = a[i].second;
      int k = a[i].first;
      int tt = (res ^ t[k]);
      if (k <= 2) {
        if (tt == 0) {
          cout << pos + 1 << endl;
          return 0;
        }
      } else {
        if ((tt ^ t[k - 2]) == 0) {
          cout << pos + 1 << endl;
          return 0;
        }
        for (int j = 1; k - j - 2 >= 0; j++) {
          if ((tt ^ t[j - 1] ^ t[k - j - 2]) == 0) {
            cout << pos + 1 + j << endl;
            return 0;
          }
        }
      }
    }
  }
  return 0;
}
