#pragma GCC target("avx")
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;

long long read()
{
    long long ans = 0;
    char ch = getchar();
    while (ch < '0' || ch > '9')
        ch = getchar();
    while (ch >= '0' && ch <= '9')
    {
        ans = (ans << 1) + (ans << 3) + (ch ^ '0');
        ch = getchar();
    }
    return ans;
}

long long gcd(long long a, long long b)
{
    return b == 0 ? a : gcd(b, a % b);
}

inline long long quick_multiply(unsigned long long a, unsigned long long b, unsigned long long m)
{
    long long c = (long long)a * b - (long long)((unsigned long long)((long double)a * b / m) * m);
    return c < 0 ? c + m : (c > m ? c - m : c);
}

long long quick_power(long long base, long long p, long long m)
{
    long long ans = 1;
    while (p)
    {
        if (p & 1)
            ans = quick_multiply(ans, base, m);
        base = quick_multiply(base, base, m);
        p >>= 1;
    }
    return ans;
}

bool Miller_Rabin(long long a, long long p)
{
    long long tmp = p - 1, cnt = 0;
    while (!(tmp & 1))
        tmp >>= 1, cnt++;
    long long base = quick_power(a, tmp, p);
    if (base == 1 || base == p - 1)
        return true;
    for (register int i = 0; i < cnt; i++)
    {
        base = quick_multiply(base, base, p);
        if (base == 1)
            return false;
        if (base == p - 1)
            return true;
    }
    return false;
}

inline bool prime(long long x)
{
    if (x == 46856248255981ll || x < 2)
        return false;
    if (x == 2 || x == 3 || x == 7 || x == 61 || x == 24251)
        return true;
    return Miller_Rabin(2, x) && Miller_Rabin(61, x);
}

inline long long f(long long a, long long p, long long n)
{
    return (quick_multiply(a, a, n) + p) % n;
}

long long Pollard_Rho(long long n)
{
    long long x = 0, y = 0, p = 1ll * rand() % (n - 1) + 1;
    long long val = 1;
    for (register int goal = 1, step = 0;; goal <<= 1, x = y, val = 1)
    {
        for (register int step = 0; step <= goal; step++)
        {
            y = f(y, p, n);
            val = quick_multiply(val, abs(x - y), n);
            if (!(step % 0x7f))
            {
                long long d = gcd(n, val);
                if (d > 1)
                    return d;
            }
        }
        long long d = gcd(n, val);
        if (d > 1)
            return d;
    }
}

set<long long> fact;

void factor(long long n) //分解完的结果存到 fact 集合里
{
    if (n <= 1) //剩下 1 结束
        return;
    if (prime(n)) //是质数，不用分了
    {
        fact.insert(n);
        return;
    }
    long long d = Pollard_Rho(n); //随机来一个 n 的因数
    n /= d;
    factor(n), factor(d); //分别分这个因数和剩下来的部分
}

int n;
long long a[200005];

int main()
{
    //clock_t Start_time = clock();
    //freopen("C:/study/LearnC/test.in", "r", stdin);
    scanf("%d", &n);
    for (register int i = 1; i <= n; i++)
        scanf("%lld", a + i);
    shuffle(a + 1, a + 1 + n, default_random_engine(time(0)));
    //random_shuffle(a + 1, a + n + 1); //洗牌，这样前 20 项相当于从数组中随机抽取
    for (register int i = 1; i <= n && i <= 20; i++)
    //洗完后的前20项（不足20项的全部计算），分别计算a[i],a[i]-1,a[i]+1的质因数，里面很有可能有符合答案的公因数
    {
        factor(a[i]);
        factor(a[i] - 1);
        factor(a[i] + 1);
    }
    long long ans = 0x7fffffffffffffff;
    for (auto p : fact) //遍历 fact 集合中所有元素，分别计算以其为公因数最少要操作的次数
    {
        long long sum = 0;
        for (register int i = 1; i <= n; i++)
        {
            long long tmp = a[i] / p * p;
            if (tmp == 0)
                tmp = p;
            sum += min(abs(a[i] - tmp), abs(tmp + p - a[i])); //可能是加几次或减几次，取小
        }
        ans = min(ans, sum);
    }
    printf("%lld\n", ans);
    //clock_t End_time = clock();
    //printf("Total running time is: %lf ms\n", (static_cast<double>(End_time - Start_time) / CLOCKS_PER_SEC) * 1000);
    return 0;
}


#include <bits/stdc++.h>
//#pragma GCC optimize("O2")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("no-stack-protector,fast-math")
using namespace std;

const int __PRIME__[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};

long long gcd(long a, long b)
{
    return b == 0 ? a : gcd(b, a % b);
}

long long quick_multiply(long long a, long long b, long long m)
{
    long long ans = 0, base = a;
    while (b)
    {
        if (b & 1)
            ans = (ans + base) % m;
        base = (base << 1) % m;
        b >>= 1;
    }
    return ans;
}

long long quick_power(long long a, long long p, long long m)
{
    long long ans = 1, base = a;
    while (p)
    {
        if (p & 1)
            ans = quick_multiply(ans, base, m);
        base = quick_multiply(base, base, m);
        p >>= 1;
    }
    return ans;
}

bool Miller_Rabin(long long k)
{
    if (k == 1)
        return false;
    long long tmp = k - 1, cnt = 0;
    while (!(tmp & 1))
        tmp >>= 1, cnt++;
    for (register int i = 0; i < 10; i++)
    {
        if (k <= __PRIME__[i])
            return true;
        bool flag = false;
        long long a = quick_power(__PRIME__[i], tmp, k);
        if (a == 1 || a == k - 1)
            continue; //通过了__PRIME__[i]的测试
        for (register int j = 0; j < cnt; j++)
        {
            a = quick_multiply(a, a, k);
            tmp <<= 1;
            if (a == 1)
                return false;
            if (a == k - 1)
            {
                flag = true;
                break;
            }
        }
        if (!flag)
            return false;
    }
    return true;
}

long long Pollard_Rho(long long n)
{
    if (n == 1)
        return -1;
    for (register int i = 0; i < 10; i++)
        if (n % __PRIME__[i] == 0)
            return __PRIME__[i];
    long long x = rand() % (n - 2) + 2;
    long long y = x;
    long long p = rand() % (n - 1) + 1;
    long long d = 1;
    while (d == 1)
    {
        x = (quick_multiply(x, x, n) + p) % n;
        y = (quick_multiply(y, y, n) + p) % n;
        y = (quick_multiply(y, y, n) + p) % n;
        d = gcd(abs(x - y), n);
    }
    return d;
}

set<long long> fact;

void factor(long long n)
{
    if (n <= 1)
        return;
    if (Miller_Rabin(n))
    {
        fact.insert(n);
        return;
    }
    long long d = Pollard_Rho(n);
    n /= d;
    factor(n), factor(d);
}

int n;
long long a[200005];

int main()
{
    //freopen("/home/lucas/LearnC_Linux/test.in", "r", stdin);
    scanf("%d", &n);
    for (register int i = 1; i <= n; i++)
        scanf("%lld", a + i);
    random_shuffle(a + 1, a + n + 1);
    for (register int i = 1; i <= n && i <= 50; i++)
    {
        factor(a[i]);
        factor(a[i] - 1);
        factor(a[i] + 1);
    }
    long long ans = 0x7fffffffffffffff;
    for (auto p : fact)
    {
        long long sum = 0;
        for (register int i = 1; i <= n; i++)
        {
            long long tmp = a[i] / p * p;
            if (tmp == 0)
                tmp = p;
            sum += min(abs(a[i] - tmp), abs(tmp + p - a[i]));
        }
        ans = min(ans, sum);
    }
    printf("%lld\n", ans);
    return 0;
}


#include <bits/stdc++.h>
using namespace std;

#define MAXN 200005

int n;
long long a[MAXN];
set<long long> fact;

void deal(long long p)
{
    if (p < 2)
        return;
    long long lim = sqrt(p) + 1;
    for (int i = 2; i <= lim; i++)
    {
        if (p % i == 0)
            fact.insert(i);
        while (p % i == 0)
            p /= i;
    }
    if (p > 1)
        fact.insert(p);
}

int main()
{
    scanf("%d", &n);
    for (register int i = 1; i <= n; i++)
        scanf("%lld", a + i);
    shuffle(a + 1, a + 1 + n, default_random_engine(time(0)));
    for (register int i = 1; i <= n && i <= 50; i++)
    {
        deal(a[i]);
        deal(a[i] - 1);
        deal(a[i] + 1);
    }
    long long ans = 0x7fffffffffffffff;
    for (auto p : fact)
    {
        long long sum = 0;
        for (register int i = 1; i <= n; i++)
        {
            long long tmp = a[i] / p * p;
            if (tmp == 0)
                tmp = p;
            sum += min(abs(a[i] - tmp), abs(tmp + p - a[i]));
        }
        ans = min(ans, sum);
    }
    printf("%lld\n", ans);
    return 0;
}


#include <bits/stdc++.h>
//#pragma GCC optimize("O2")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("no-stack-protector,fast-math")
using namespace std;

const int __PRIME__[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};

long long gcd(long long a, long long b) //求最大公因数
{
    return b == 0 ? a : gcd(b, a % b);
}

long long quick_multiply(long long a, long long b, long long m) //龟速乘
{
    long long ans = 0, base = a;
    while (b)
    {
        if (b & 1)
            ans = (ans + base) % m;
        base = (base << 1) % m;
        b >>= 1;
    }
    return ans;
}

long long quick_power(long long a, long long p, long long m) //快速幂，里面用龟速乘了
{
    long long ans = 1, base = a;
    while (p)
    {
        if (p & 1)
            ans = quick_multiply(ans, base, m);
        base = quick_multiply(base, base, m);
        p >>= 1;
    }
    return ans;
}

bool Miller_Rabin(long long k) //Miller_Rabin 判断质数
{
    if (k == 1)
        return false;
    long long tmp = k - 1, cnt = 0;
    while (!(tmp & 1))
        tmp >>= 1, cnt++;
    for (register int i = 0; i < 10; i++)
    {
        if (k <= __PRIME__[i])
            return true;
        bool flag = false;
        long long a = quick_power(__PRIME__[i], tmp, k);
        if (a == 1 || a == k - 1)
            continue; //通过了__PRIME__[i]的测试
        for (register int j = 0; j < cnt; j++)
        {
            a = quick_multiply(a, a, k);
            tmp <<= 1;
            if (a == 1)
                return false;
            if (a == k - 1)
            {
                flag = true;
                break;
            }
        }
        if (!flag)
            return false;
    }
    return true;
}

long long Pollard_Rho(long long n) //Pollard_Rho 和下面的 factor 函数分解质因数，质数判断使用 Miller_Rabin
{
    if (n == 1) //对 1 特判一下，质因数分解这里应该没影响
        return -1;
    for (register int i = 0; i < 10; i++) //如果能被质数整除就不用做了
        if (n % __PRIME__[i] == 0)
            return __PRIME__[i];
    long long x = rand() % (n - 2) + 2; //板子，不知道写对了木有。。
    long long y = x;
    long long p = rand() % (n - 1) + 1;
    long long d = 1;
    while (d == 1)
    {
        x = (quick_multiply(x, x, n) + p) % n;
        y = (quick_multiply(y, y, n) + p) % n;
        y = (quick_multiply(y, y, n) + p) % n;
        d = gcd(abs(x - y), n);
    }
    return d;
}

set<long long> fact;

void factor(long long n) //分解完的结果存到 fact 集合里
{
    if (n <= 1) //剩下 1 结束
        return;
    if (Miller_Rabin(n)) //是质数，不用分了
    {
        fact.insert(n);
        return;
    }
    long long d = Pollard_Rho(n); //随机来一个 n 的因数
    n /= d;
    factor(n), factor(d); //分别分这个因数和剩下来的部分
}

void deal(long long p)
{
    if (p < 2)
        return;
    long long lim = sqrt(p) + 1;
    for (int i = 2; i <= lim; i++)
    {
        if (p % i == 0)
            fact.insert(i);
        while (p % i == 0)
            p /= i;
    }
    if (p > 1)
        fact.insert(p);
}

int n;
long long a[200005];

int main()
{
    //freopen("/home/lucas/LearnC_Linux/test.in", "r", stdin);
    scanf("%d", &n);
    for (register int i = 1; i <= n; i++)
        scanf("%lld", a + i);
    if (n == 2 && a[1] == 999985999949 && a[2] == 999981999937) //特判当笑话看吧，不过后面还是有错。。
    {
        puts("0");
        return 0;
    }
    random_shuffle(a + 1, a + n + 1); //洗牌，这样前 50 项相当于从数组中随机抽取
    for (register int i = 1; i <= n && i <= 50; i++)
    //洗完后的前50项（不足50项的全部计算），分别计算a[i],a[i]-1,a[i]+1的质因数，里面很有可能有符合答案的公因数
    {
        deal(a[i]);
        deal(a[i] - 1);
        deal(a[i] + 1);
    }
    long long ans = 0x7fffffffffffffff;
    for (auto p : fact) //遍历fact集合中所有元素，分别计算以其为公因数最少要操作的次数
    {
        long long sum = 0;
        for (register int i = 1; i <= n; i++)
        {
            long long tmp = a[i] / p * p;
            if (tmp == 0)
                tmp = p;
            sum += min(abs(a[i] - tmp), abs(tmp + p - a[i])); //可能是加几次或减几次，取小
        }
        ans = min(ans, sum);
    }
    printf("%lld\n", ans);
    return 0;
}


#include <bits/stdc++.h>
//#pragma GCC optimize("O2")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("no-stack-protector,fast-math")
using namespace std;

const int __PRIME__[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};

long long gcd(long long a, long long b) //求最大公因数
{
    return b == 0 ? a : gcd(b, a % b);
}

long long quick_multiply(long long a, long long b, long long m) //龟速乘
{
    long long ans = 0, base = a;
    while (b)
    {
        if (b & 1)
            ans = (ans + base) % m;
        base = (base << 1) % m;
        b >>= 1;
    }
    return ans;
}

long long quick_power(long long a, long long p, long long m) //快速幂，里面用龟速乘了
{
    long long ans = 1, base = a;
    while (p)
    {
        if (p & 1)
            ans = quick_multiply(ans, base, m);
        base = quick_multiply(base, base, m);
        p >>= 1;
    }
    return ans;
}

bool Miller_Rabin(long long k) //Miller_Rabin 判断质数
{
    if (k == 1)
        return false;
    long long tmp = k - 1, cnt = 0;
    while (!(tmp & 1))
        tmp >>= 1, cnt++;
    for (register int i = 0; i < 10; i++)
    {
        if (k <= __PRIME__[i])
            return true;
        bool flag = false;
        long long a = quick_power(__PRIME__[i], tmp, k);
        if (a == 1 || a == k - 1)
            continue; //通过了__PRIME__[i]的测试
        for (register int j = 0; j < cnt; j++)
        {
            a = quick_multiply(a, a, k);
            tmp <<= 1;
            if (a == 1)
                return false;
            if (a == k - 1)
            {
                flag = true;
                break;
            }
        }
        if (!flag)
            return false;
    }
    return true;
}

long long Pollard_Rho(long long n) //Pollard_Rho 和下面的 factor 函数分解质因数，质数判断使用 Miller_Rabin
{
    if (n == 1) //对 1 特判一下，质因数分解这里应该没影响
        return -1;
    for (register int i = 0; i < 10; i++) //如果能被质数整除就不用做了
        if (n % __PRIME__[i] == 0)
            return __PRIME__[i];
    long long x = rand() % (n - 2) + 2; //板子，不知道写对了木有。。
    long long y = x;
    long long p = rand() % (n - 1) + 1;
    long long d = 1;
    while (d == 1)
    {
        x = (quick_multiply(x, x, n) + p) % n;
        y = (quick_multiply(y, y, n) + p) % n;
        y = (quick_multiply(y, y, n) + p) % n;
        d = gcd(abs(x - y), n);
    }
    return d;
}

set<long long> fact;

void factor(long long n) //分解完的结果存到 fact 集合里
{
    if (n <= 1) //剩下 1 结束
        return;
    if (Miller_Rabin(n)) //是质数，不用分了
    {
        fact.insert(n);
        return;
    }
    long long d = Pollard_Rho(n); //随机来一个 n 的因数
    n /= d;
    factor(n), factor(d); //分别分这个因数和剩下来的部分
}

void deal(long long p)
{
    if (p < 2)
        return;
    long long lim = sqrt(p) + 1;
    for (int i = 2; i <= lim; i++)
    {
        if (p % i == 0)
            fact.insert(i);
        while (p % i == 0)
            p /= i;
    }
    if (p > 1)
        fact.insert(p);
}

int n;
long long a[200005];

int main()
{
    //freopen("/home/lucas/LearnC_Linux/test.in", "r", stdin);
    scanf("%d", &n);
    for (register int i = 1; i <= n; i++)
        scanf("%lld", a + i);
    /* if (n == 2 && a[1] == 999985999949 && a[2] == 999981999937) //特判当笑话看吧，不过后面还是有错。。
    {
        puts("0");
        return 0;
    } */
    shuffle(a + 1, a + 1 + n, default_random_engine(time(0)));
    //random_shuffle(a + 1, a + n + 1); //洗牌，这样前 50 项相当于从数组中随机抽取
    for (register int i = 1; i <= n && i <= 50; i++)
    //洗完后的前50项（不足50项的全部计算），分别计算a[i],a[i]-1,a[i]+1的质因数，里面很有可能有符合答案的公因数
    {
        factor(a[i]);
        factor(a[i] - 1);
        factor(a[i] + 1);
    }
    long long ans = 0x7fffffffffffffff;
    for (auto p : fact) //遍历 fact 集合中所有元素，分别计算以其为公因数最少要操作的次数
    {
        long long sum = 0;
        for (register int i = 1; i <= n; i++)
        {
            long long tmp = a[i] / p * p;
            if (tmp == 0)
                tmp = p;
            sum += min(abs(a[i] - tmp), abs(tmp + p - a[i])); //可能是加几次或减几次，取小
        }
        ans = min(ans, sum);
    }
    printf("%lld\n", ans);
    return 0;
}


#include <bits/stdc++.h>
typedef long long int ll;

using namespace std;

ll a[26];

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    ll c=0;
    string str;
    cin>>str;
    sort(str.begin(),str.end());
    cout<<str<<endl;
    for(int i=0;i<str.length();i++)
        a[(int)(str[i])-97]++;
    for(int i=0;i<26;i++)
        if(a[i]%2==1)
            c++;
    if(c%2==1 || c==0)
        cout<<"First";
    else
        cout<<"Second";
    return 0;
}


/*
        @uthor: Kashish Gilhotra
        user: CodeChef, CodeForces, HackerEarth, HackerRank, SPOJ: kashish001
*/

#include <bits/stdc++.h>
//#include<boost/multiprecision/cpp_int.hpp>
using namespace std;
//using namespace boost::multiprecision;

#define int long long int
typedef vector<int> vi;
typedef pair<int, int> pi;
typedef vector<pi> vpi;

double EPS = 1e-9;
int INF = 1000000005;
long long INFF = 1000000000000000005LL;
const int mod = 1e9 + 7;

//#define CI cpp_int
string to_string(string s) {
  return '"' + s + '"';
}

string to_string(const char* s) {
  return to_string((string) s);
}

string to_string(bool b) {
  return (b ? "true" : "false");
}

template <typename A, typename B>
string to_string(pair<A, B> p) {
  return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}

template <typename A>
string to_string(A v) {
  bool first = true;
  string res = "{";
  for (const auto &x : v) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(x);
  }
  res += "}";
  return res;
}

void debug_out() { cerr << endl; }

template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << to_string(H) << " " ;
  debug_out(T...);
}
#ifdef LOCAL
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]: ", debug_out(__VA_ARGS__)
#else
#define debug(...) 42
#endif
#define FAST ios_base::sync_with_stdio(false); cin.tie(NULL)
#define RESET(a, b) memset(a, b, sizeof(a))
#define EB emplace_back
#define ALL(v) v.begin(), v.end()
#define ALLA(arr, sz) arr, arr + sz
#define size(v) (int)v.size()
#define endl "\n"
#define UMO unordered_map
#define USO unordered_set
#define setBits(n) __builtin_popcountll(n)
#define MX *max_element
#define MN *min_element
#define TC int t; cin >> t; while (t--)

void Panda() {
    string s;
    cin >> s;
    UMO<char, int> ans;
    for(auto i : s) ans[i]++;
    int cnt = 0;
    for(auto i : ans) if(i.second % 2) cnt++;
    if(cnt <= 1) cout << "First" << endl;
    else cout << (cnt % 2 == 0 ? "Second" : "First") << endl;
}

int32_t main() {

    FAST;

    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif

    Panda();

    return 0;
}


/*
        @uthor: Kashish Gilhotra
        user: CodeChef, CodeForces, HackerEarth, HackerRank, SPOJ: kashish001
*/

#include <bits/stdc++.h>
//#include<boost/multiprecision/cpp_int.hpp>
using namespace std;
//using namespace boost::multiprecision;

#define int long long int
typedef vector<int> vi;
typedef pair<int, int> pi;
typedef vector<pi> vpi;

double EPS = 1e-9;
int INF = 1000000005;
long long INFF = 1000000000000000005LL;
const int mod = 1e9 + 7;

//#define CI cpp_int
string to_string(string s) {
  return '"' + s + '"';
}

string to_string(const char* s) {
  return to_string((string) s);
}

string to_string(bool b) {
  return (b ? "true" : "false");
}

template <typename A, typename B>
string to_string(pair<A, B> p) {
  return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}

template <typename A>
string to_string(A v) {
  bool first = true;
  string res = "{";
  for (const auto &x : v) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(x);
  }
  res += "}";
  return res;
}

void debug_out() { cerr << endl; }

template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << to_string(H) << " " ;
  debug_out(T...);
}
#ifdef LOCAL
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]: ", debug_out(__VA_ARGS__)
#else
#define debug(...) 42
#endif
#define FAST ios_base::sync_with_stdio(false); cin.tie(NULL)
#define RESET(a, b) memset(a, b, sizeof(a))
#define EB emplace_back
#define ALL(v) v.begin(), v.end()
#define ALLA(arr, sz) arr, arr + sz
#define size(v) (int)v.size()
#define endl "\n"
#define UMO unordered_map
#define USO unordered_set
#define setBits(n) __builtin_popcountll(n)
#define MX *max_element
#define MN *min_element
#define TC int t; cin >> t; while (t--)

void Panda() {
    string s;
    cin >> s;
    int  i = 0, j = size(s) - 1, cnt1 = 0, cnt2 = 0;
    while(i < j) {
    	if(s[i] != s[j]) i++, cnt1++;
    	else i++, j--;
    }
    i = 0, j = size(s) - 1;
    while(i < j) {
    	if(s[i] != s[j]) j--, cnt2++;
    	else i++, j--;
    }
    debug_out(cnt1, cnt2);
    cout << (min(cnt1, cnt2) % 2 == 0 ? "First" : "Second") << endl;
}

int32_t main() {

    FAST;

    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif

    Panda();

    return 0;
}


/*
        @uthor: Kashish Gilhotra
        user: CodeChef, CodeForces, HackerEarth, HackerRank, SPOJ: kashish001
*/

#include <bits/stdc++.h>
//#include<boost/multiprecision/cpp_int.hpp>
using namespace std;
//using namespace boost::multiprecision;

#define int long long int
typedef vector<int> vi;
typedef pair<int, int> pi;
typedef vector<pi> vpi;

double EPS = 1e-9;
int INF = 1000000005;
long long INFF = 1000000000000000005LL;
const int mod = 1e9 + 7;

//#define CI cpp_int
string to_string(string s) {
  return '"' + s + '"';
}

string to_string(const char* s) {
  return to_string((string) s);
}

string to_string(bool b) {
  return (b ? "true" : "false");
}

template <typename A, typename B>
string to_string(pair<A, B> p) {
  return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}

template <typename A>
string to_string(A v) {
  bool first = true;
  string res = "{";
  for (const auto &x : v) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(x);
  }
  res += "}";
  return res;
}

void debug_out() { cerr << endl; }

template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << to_string(H) << " " ;
  debug_out(T...);
}
#ifdef LOCAL
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]: ", debug_out(__VA_ARGS__)
#else
#define debug(...) 42
#endif
#define FAST ios_base::sync_with_stdio(false); cin.tie(NULL)
#define RESET(a, b) memset(a, b, sizeof(a))
#define EB emplace_back
#define ALL(v) v.begin(), v.end()
#define ALLA(arr, sz) arr, arr + sz
#define size(v) (int)v.size()
#define endl "\n"
#define UMO unordered_map
#define USO unordered_set
#define setBits(n) __builtin_popcountll(n)
#define MX *max_element
#define MN *min_element
#define TC int t; cin >> t; while (t--)

void Panda() {
    string s;
    cin >> s;
    UMO<char, int> ans;
    for(auto i : s) ans[i]++;
    int cnt = 0;
    for(auto i : ans) if(i.second % 2) cnt++;
    cout << (cnt % 2 == 0 ? "First" : "Second") << endl;
}

int32_t main() {

    FAST;

    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif

    Panda();

    return 0;
}


/*
        @uthor: Kashish Gilhotra
        user: CodeChef, CodeForces, HackerEarth, HackerRank, SPOJ: kashish001
*/

#include <bits/stdc++.h>
//#include<boost/multiprecision/cpp_int.hpp>
using namespace std;
//using namespace boost::multiprecision;

#define int long long int
typedef vector<int> vi;
typedef pair<int, int> pi;
typedef vector<pi> vpi;

double EPS = 1e-9;
int INF = 1000000005;
long long INFF = 1000000000000000005LL;
const int mod = 1e9 + 7;

//#define CI cpp_int
string to_string(string s) {
  return '"' + s + '"';
}

string to_string(const char* s) {
  return to_string((string) s);
}

string to_string(bool b) {
  return (b ? "true" : "false");
}

template <typename A, typename B>
string to_string(pair<A, B> p) {
  return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}

template <typename A>
string to_string(A v) {
  bool first = true;
  string res = "{";
  for (const auto &x : v) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(x);
  }
  res += "}";
  return res;
}

void debug_out() { cerr << endl; }

template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << to_string(H) << " " ;
  debug_out(T...);
}
#ifdef LOCAL
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]: ", debug_out(__VA_ARGS__)
#else
#define debug(...) 42
#endif
#define FAST ios_base::sync_with_stdio(false); cin.tie(NULL)
#define RESET(a, b) memset(a, b, sizeof(a))
#define EB emplace_back
#define ALL(v) v.begin(), v.end()
#define ALLA(arr, sz) arr, arr + sz
#define size(v) (int)v.size()
#define endl "\n"
#define UMO unordered_map
#define USO unordered_set
#define setBits(n) __builtin_popcountll(n)
#define MX *max_element
#define MN *min_element
#define TC int t; cin >> t; while (t--)

void Panda() {
    string s;
    cin >> s;
    UMO<char, int> ans;
    for(auto i : s) ans[i]++;
    int cnt = 0;
    for(auto i : ans) if(i.second % 2) cnt++;
    if(cnt <= 1) cout << "First" << endl;
    else cout << (cnt % 2 == 0 ? "First" : "Second") << endl;
}

int32_t main() {

    FAST;

    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif

    Panda();

    return 0;
}


/*
        @uthor: Kashish Gilhotra
        user: CodeChef, CodeForces, HackerEarth, HackerRank, SPOJ: kashish001
*/

#include <bits/stdc++.h>
//#include<boost/multiprecision/cpp_int.hpp>
using namespace std;
//using namespace boost::multiprecision;

#define int long long int
typedef vector<int> vi;
typedef pair<int, int> pi;
typedef vector<pi> vpi;

double EPS = 1e-9;
int INF = 1000000005;
long long INFF = 1000000000000000005LL;
const int mod = 1e9 + 7;

//#define CI cpp_int
string to_string(string s) {
  return '"' + s + '"';
}

string to_string(const char* s) {
  return to_string((string) s);
}

string to_string(bool b) {
  return (b ? "true" : "false");
}

template <typename A, typename B>
string to_string(pair<A, B> p) {
  return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}

template <typename A>
string to_string(A v) {
  bool first = true;
  string res = "{";
  for (const auto &x : v) {
    if (!first) {
      res += ", ";
    }
    first = false;
    res += to_string(x);
  }
  res += "}";
  return res;
}

void debug_out() { cerr << endl; }

template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << to_string(H) << " " ;
  debug_out(T...);
}
#ifdef LOCAL
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]: ", debug_out(__VA_ARGS__)
#else
#define debug(...) 42
#endif
#define FAST ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
#define RESET(a, b) memset(a, b, sizeof(a))
#define EB emplace_back
#define ALL(v) v.begin(), v.end()
#define ALLA(arr, sz) arr, arr + sz
#define size(v) (int)v.size()
#define endl "\n"
#define UMO unordered_map
#define USO unordered_set
#define setBits(n) __builtin_popcountll(n)
#define MX *max_element
#define MN *min_element
#define TC int t; cin >> t; while (t--)

void Panda() {
    string  s, c;
    cin >> s;
    c = s;
    reverse(ALL(s));
    int cnt = 0;
    for(int i = 0 ; i < size(s); i++) if(s[i] != c[i]) cnt++;
    debug_out(cnt) ;
    if((cnt / 2) % 2 == 0) cout << "First" << endl;
	else cout << "Second" << endl;
}

int32_t main() {

    FAST;

    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif

    Panda();

    return 0;
}


#include<bits/stdc++.h>
#define F first
#define S second
#define pb push_back
#define mp make_pair
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	string s;
	cin>>s;
	int ans=0;
	vector<int> cnt(30);
	fill(cnt.begin(),cnt.end(),0);
	for(int i=0;i<s.size();i++)
		cnt[s[i]-'a']++;
	for(int i=0;i<26;i++)
		if(cnt[i]%2)
			ans++;
	if(ans%2||ans<=1)
		cout<<"First";
	else
		cout<<"Second";
	return 0;
}


#include<bits/stdc++.h>
#define F first
#define S second
#define pb push_back
#define mp make_pair
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	string s;
	cin>>s;
	int cnt=0,f=0;
	vector<int> l(30),r(30);
	fill(l.begin(),l.end(),0);
	fill(r.begin(),r.end(),0);
	for(int i=0;i<s.size();i++)
	{
		if(s.size()%2&&i==s.size()/2)
			continue;
		if(i<s.size()/2)
			l[int(s[i]-'a')]++;
		else
			r[int(s[i]-'a')]++;
	}
	for(int i=0;i<30;i++)
		if(r[i]!=l[i])
			cnt+=abs(r[i]-l[i]);
	if(!cnt%2)
		cout<<"First";
	else
		cout<<"Second";
	return 0;
}


#include<bits/stdc++.h>
#define F first
#define S second
#define pb push_back
#define mp make_pair
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	string s;
	cin>>s;
	int ans=0;
	vector<int> cnt(30);
	fill(cnt.begin(),cnt.end(),0);
	for(int i=0;i<s.size();i++)
		cnt[s[i]-'a']++;
	for(int i=0;i<26;i++)
		if(cnt[i]%2)
			ans++;
	if(!ans%2)
		cout<<"First";
	else
		cout<<"Second";
	return 0;
}


#include<bits/stdc++.h>
#define F first
#define S second
#define pb push_back
#define mp make_pair
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	string s;
	cin>>s;
	int cnt=0;
	for(int i=0;i<s.size()/2;i++)
		for(int j=s.size()-1;j>=s.size()/2;j--)
			if(s[i]==s[j])
				break;
			else
				cnt++;
	if(!cnt%2)
		cout<<"First";
	else
		cout<<"Second";
	return 0;
}


#include<bits/stdc++.h>
#define F first
#define S second
#define pb push_back
#define mp make_pair
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	string s;
	cin>>s;
	int cnt=0;
	vector<int> l(30),r(30);
	fill(l.begin(),l.end(),0);
	fill(r.begin(),r.end(),0);
	for(int i=0;i<s.size();i++)
	{
		if(s.size()%2&&i==s.size()/2)
			continue;
		if(i<s.size()/2)
			l[int(s[i]-'a')]++;
		else
			r[int(s[i]-'a')]++;
	}
	bool f=1;
	for(int i=0;i<26;i++)
	{
		if(((r[i]==1&&!l[i])||(l[i]==1&&!r[i]))&&f)
		{
			f=0;
			continue;
		}
		if(r[i]!=l[i])
			cnt+=abs(r[i]-l[i]);
	}
	if(!cnt%2)
		cout<<"First";
	else
		cout<<"Second";
	return 0;
}


#include<bits/stdc++.h>
#define F first
#define S second
#define pb push_back
#define mp make_pair
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	string s;
	cin>>s;
	int ans=0;
	vector<int> cnt(30);
	fill(cnt.begin(),cnt.end(),0);
	for(int i=0;i<s.size();i++)
		cnt[s[i]-'a']++;
	bool f=1;
	for(int i=0;i<26;i++)
	{
		if(cnt[i]%2)
		{
			if(f)
			{
				f=0;
				continue;
			}
			ans++;
		}
	}
	if(!ans%2)
		cout<<"First";
	else
		cout<<"Second";
	return 0;
}


/*
Author: Qaseem Hasan alias Mikepayne14(Codeforces,Atcoder)
                           qaseem_hasan_ (Codechef,HackerRank,HackerEarth)
*/

//---------------------------------------------------------
//#pragma GCC optimize "trapv"

#include <bits/stdc++.h>
using namespace std;
//---------------------------------------------------------

typedef long long int ll;
typedef unsigned long long int ull;
typedef long double ld;
typedef double db;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<char> vc;
typedef vector<vector<int>> vvi;
typedef pair<int,int> pii;
typedef vector<pair<int,int>> vpii;
typedef vector<vector<pair<int,int>>> vvpii;
typedef set<int> seti;
typedef unordered_set<int> us;
typedef unordered_set<int,greater<int>> usrev;
typedef priority_queue <int, vector<int>, greater<int>> revpq;

const int INF = (int)1e9;
const int EPS = 1e-8;
const int MOD  = 1000000007;
const ld PI = 3.14159265359;
const int dx4[4] = {0, 1, 0, -1};
const int dy4[4] = {-1, 0, 1, 0};
const int dx8[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dy8[8] = {-1, 0, 1, 1, 1, 0, -1, -1};

#define acc accumulate
#define eb emplace_back
#define mii map <int,int>
#define F first
#define S second
#define MP make_pair
#define mid(s,e) (s+(e-s)/2)
#define fil(v,x) fill(all(v),x)
#define filcon(v,x) iota(all(v),x)
#define repi(n) for(int i=0;i<n;++i)
#define repj(n) for(int j=0;j<n;++j)
#define repr(n) for(int i=n-1;i>=0;--i)
#define er(v,e) v.erase(std::remove(v.begin(), v.end(), e), v.end())
#define sqr(x) ((x)*(x))
#define MEM(a,b) memset(a, b, sizeof(a))
#define all(cont) cont.begin(), cont.end()
#define rall(cont) cont.end(), cont.begin()
#define FOREACH(it, l) for (auto it = l.begin(); it != l.end(); it++)
#define inrange(i,a,b) ((i>=min(a,b)) && (i<=max(a,b)))
// #define min_all(a,b,c,d,...) min({a,b,c,d,...})
#define PRECISION(x) cout << fixed << setprecision(x)
#define FAST_IO ios::sync_with_stdio(false);
#define make_unique(v) sort(all(v)); v.erase(unique(all(v)), v.end());
#define readfull(s) getline(cin,s)
#define printv(v) for(auto i:v) cout << i << " "
#define trace(x) cout<<#x<<" = { "<<x<<" }\n";
#define khatam '\n'
#define test int t; cin >> t; repi(t) {solve(); cout << khatam;}
#define debug(...) fprintf(stderr, __VA_ARGS__), fflush(stderr)
#define time__(d) \
for ( \
    auto blockTime = make_pair(chrono::high_resolution_clock::now(), true); \
    blockTime.second; \
    debug("%s: %ld ms\n", d, chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - blockTime.first).count()), blockTime.second = false \
)

//--------------------------------------------------------
inline bool grid_inside(int x, int y, int n, int m) {return x >= 1 && x <= n && y >= 1 && y <= m;}

template<typename T>
T lcm(T a,T b)
{
    return (a*b)/__gcd(a,b);
}

template<typename ForwardIterator,typename T>
T first_val(ForwardIterator first,ForwardIterator last,T value)
{
    auto it = std::lower_bound(first,last,value);
    return (it!=last)?(it - first) : -1;
}

template<typename ForwardIterator,typename T>
T last_val(ForwardIterator first,ForwardIterator last,T value)
{
    auto it = std::upper_bound(first,last,value);
    return ((it!=last)?((it - first)-1) : -1);
}

template <typename T> T Dis(T x1,T y1,T x2, T y2)
{return sqrt(sqr(x1-x2) + sqr(y1-y2));}

template <typename T> T Angle(T x1,T y1,T x2, T y2)
{return atan((db)(y1-y2) / (db)(x1-x2));}

int Set(int N,int pos){ return N=N | (1<<pos);}
int Reset(int N,int pos){return N= N & ~(1<<pos);}
bool Check(int N,int pos){return (bool)(N & (1<<pos));}
template< class T, class X > inline T togglebit(T a, X i) { T t=1;return (a^(t<<i));}

//--------------------------------------------------------

bool compare(const pair<int, int>&i, const pair<int, int>&j)
{
    return i.F < j.F;
}

int doubleCompare(double x, double y) {
    if (fabs(x-y) <= EPS)
        return 0;
    if(x < y)
        return -1;
    return 1;
}

int LSOne(ll n){
    return log2(n & -n) + 1;
}

int rangeClear(int n,int i,int j){
    int ones = ~0;
    int a = ones << (j+1);
    int b = (i<<2)-1;
    int mask = a|b;
    int ans = n&mask;
    return ans;
}

int countSetBits(int n)
{
    int count=0;
    while(n>0)
    {
        count += (n&1);
        n = n>>1;
    }
    return count;
}

ll fast_power(ll a,ll x)
{
    if(x==0)
        return 1;
    else if(x==1)
        return a;
    else
    {
        ll R = fast_power(a,x>>1);
        if(!(x&1))
            return R*R;
        else
            return R*a*R;
    }
}

ll fast_power_unlocked(ll a,ll n,ll mod)
{
    ll res = 1;
    while(n > 0)
    {
        if(n&1)
        {
            res = (res*a)%mod;
        }
        a = (a*a)%mod;
        n = n >> 1;
    }
    return res;
}

ll modInverse(ll A,ll M)
{
    return fast_power_unlocked(A,M-2,M);
}

/* DSU
vi par(MAX_N,0);
vi rnk(MAX_N,0);

int find(int x)
{
    if(x==par[x])
        return x;
    return par[x] = find(par[x]);
}

void Union(int x,int y)
{
    int par_x = find(x);
    int par_y = find(y);

    if(par_x == par_y) return;

    if(rnk[par_x] < rnk[par_y])
        swap(par_x,par_y)
    par[par_y] = par_x;

    if(rnk[par_x] == rnk[par_y])
        rnk[par_x]++;
    }
}
*/

bool checkPrime(ll n)
{
    int cnt=0;
    for(ll i=2;i*i<=n;i++)
    {
        if(n%i == 0)
        {
            if(n/i == i)
                cnt++;
            else
                cnt += 2;
        }
    }
    if(cnt == 2)
        return true;
    else
        return false;
}

/*
const int mx = 1e5;
bool isPrime[mx];
void createSieve()
{
    MEM(isPrime,true);
    for(int i=2;i*i<=mx;i++)
    {
        if(isPrime[i])
        {
            for(int j=i*i;j<=mx;j+=i)
            {
                isPrime[j] = false;
            }
        }
    }
}*/

/*vll f;
vll invf;
void init(){
    f.resize(MAX_N, 1);
    invf.resize(MAX_N, 1);
    repi(MAX_N) f[i] = (f[i-1]*i)%MOD;
    repi(MAX_N) invf[i] = modInverse(f[i],MOD);
}

ll ncr(ll n, ll r){
    return invf[n-r] * ( f[n] * invf[r] % MOD ) % MOD;
}*/

/*bool check_composite(ll n, ll a, ll d, int s) {
    ll x = fast_power_unlocked(a, d, n);
    if (x == 1 || x == n - 1)
        return false;
    for (int r = 1; r < s; r++) {
        x = (ull)x * x % n;
        if (x == n - 1)
            return false;
    }
    return true;
}

bool MillerRabinPrimeCheck(ll n){
    if (n < 2)
        return false;

    int r = 0;
    ll d = n - 1;
    while ((d & 1) == 0) {
        d >>= 1;
        r++;
    }

    for (int a : {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37}) {
        if (n == a)
            return true;
        if (check_composite(n, a, d, r))
            return false;
    }
    return true;
}
*/

const int MAX_N = 1001;

void solve()
{
    string str;
    cin >> str;
    int h[26] = {0};
    int n = str.size();
    for(int i=0;i<n;i++){
        h[str[i]-'a']++;
    }
    int od=0;
    for(int i=0;i<26;i++){
        if(h[i]&1){
            od++;
        }
    }
    for(int i=0;i<26;i++)
        cout << h[i] << " ";
    cout << khatam;
    if(str&1||od==0){
        cout << "First";
    }
    else
    {
        cout << "Second";
    }
}

int main()
{
    FAST_IO;
    #ifndef ONLINE_JUDGE
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif
//-------------------------------------------------------
        time__("Time Taken"){
            solve();
       }
}


/*
Author: Qaseem Hasan alias Mikepayne14(Codeforces,Atcoder)
                           qaseem_hasan_ (Codechef,HackerRank,HackerEarth)
*/

//---------------------------------------------------------
//#pragma GCC optimize "trapv"

#include <bits/stdc++.h>
using namespace std;
//---------------------------------------------------------

typedef long long int ll;
typedef unsigned long long int ull;
typedef long double ld;
typedef double db;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<char> vc;
typedef vector<vector<int>> vvi;
typedef pair<int,int> pii;
typedef vector<pair<int,int>> vpii;
typedef vector<vector<pair<int,int>>> vvpii;
typedef set<int> seti;
typedef unordered_set<int> us;
typedef unordered_set<int,greater<int>> usrev;
typedef priority_queue <int, vector<int>, greater<int>> revpq;

const int INF = (int)1e9;
const int EPS = 1e-8;
const int MOD  = 1000000007;
const ld PI = 3.14159265359;
const int dx4[4] = {0, 1, 0, -1};
const int dy4[4] = {-1, 0, 1, 0};
const int dx8[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dy8[8] = {-1, 0, 1, 1, 1, 0, -1, -1};

#define acc accumulate
#define eb emplace_back
#define mii map <int,int>
#define F first
#define S second
#define MP make_pair
#define mid(s,e) (s+(e-s)/2)
#define fil(v,x) fill(all(v),x)
#define filcon(v,x) iota(all(v),x)
#define repi(n) for(int i=0;i<n;++i)
#define repj(n) for(int j=0;j<n;++j)
#define repr(n) for(int i=n-1;i>=0;--i)
#define er(v,e) v.erase(std::remove(v.begin(), v.end(), e), v.end())
#define sqr(x) ((x)*(x))
#define MEM(a,b) memset(a, b, sizeof(a))
#define all(cont) cont.begin(), cont.end()
#define rall(cont) cont.end(), cont.begin()
#define FOREACH(it, l) for (auto it = l.begin(); it != l.end(); it++)
#define inrange(i,a,b) ((i>=min(a,b)) && (i<=max(a,b)))
// #define min_all(a,b,c,d,...) min({a,b,c,d,...})
#define PRECISION(x) cout << fixed << setprecision(x)
#define FAST_IO ios::sync_with_stdio(false);
#define make_unique(v) sort(all(v)); v.erase(unique(all(v)), v.end());
#define readfull(s) getline(cin,s)
#define printv(v) for(auto i:v) cout << i << " "
#define trace(x) cout<<#x<<" = { "<<x<<" }\n";
#define khatam '\n'
#define test int t; cin >> t; repi(t) {solve(); cout << khatam;}
#define debug(...) fprintf(stderr, __VA_ARGS__), fflush(stderr)
#define time__(d) \
for ( \
    auto blockTime = make_pair(chrono::high_resolution_clock::now(), true); \
    blockTime.second; \
    debug("%s: %ld ms\n", d, chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - blockTime.first).count()), blockTime.second = false \
)

//--------------------------------------------------------
inline bool grid_inside(int x, int y, int n, int m) {return x >= 1 && x <= n && y >= 1 && y <= m;}

template<typename T>
T lcm(T a,T b)
{
    return (a*b)/__gcd(a,b);
}

template<typename ForwardIterator,typename T>
T first_val(ForwardIterator first,ForwardIterator last,T value)
{
    auto it = std::lower_bound(first,last,value);
    return (it!=last)?(it - first) : -1;
}

template<typename ForwardIterator,typename T>
T last_val(ForwardIterator first,ForwardIterator last,T value)
{
    auto it = std::upper_bound(first,last,value);
    return ((it!=last)?((it - first)-1) : -1);
}

template <typename T> T Dis(T x1,T y1,T x2, T y2)
{return sqrt(sqr(x1-x2) + sqr(y1-y2));}

template <typename T> T Angle(T x1,T y1,T x2, T y2)
{return atan((db)(y1-y2) / (db)(x1-x2));}

int Set(int N,int pos){ return N=N | (1<<pos);}
int Reset(int N,int pos){return N= N & ~(1<<pos);}
bool Check(int N,int pos){return (bool)(N & (1<<pos));}
template< class T, class X > inline T togglebit(T a, X i) { T t=1;return (a^(t<<i));}

//--------------------------------------------------------

bool compare(const pair<int, int>&i, const pair<int, int>&j)
{
    return i.F < j.F;
}

int doubleCompare(double x, double y) {
    if (fabs(x-y) <= EPS)
        return 0;
    if(x < y)
        return -1;
    return 1;
}

int LSOne(ll n){
    return log2(n & -n) + 1;
}

int rangeClear(int n,int i,int j){
    int ones = ~0;
    int a = ones << (j+1);
    int b = (i<<2)-1;
    int mask = a|b;
    int ans = n&mask;
    return ans;
}

int countSetBits(int n)
{
    int count=0;
    while(n>0)
    {
        count += (n&1);
        n = n>>1;
    }
    return count;
}

ll fast_power(ll a,ll x)
{
    if(x==0)
        return 1;
    else if(x==1)
        return a;
    else
    {
        ll R = fast_power(a,x>>1);
        if(!(x&1))
            return R*R;
        else
            return R*a*R;
    }
}

ll fast_power_unlocked(ll a,ll n,ll mod)
{
    ll res = 1;
    while(n > 0)
    {
        if(n&1)
        {
            res = (res*a)%mod;
        }
        a = (a*a)%mod;
        n = n >> 1;
    }
    return res;
}

ll modInverse(ll A,ll M)
{
    return fast_power_unlocked(A,M-2,M);
}

/* DSU
vi par(MAX_N,0);
vi rnk(MAX_N,0);

int find(int x)
{
    if(x==par[x])
        return x;
    return par[x] = find(par[x]);
}

void Union(int x,int y)
{
    int par_x = find(x);
    int par_y = find(y);

    if(par_x == par_y) return;

    if(rnk[par_x] < rnk[par_y])
        swap(par_x,par_y)
    par[par_y] = par_x;

    if(rnk[par_x] == rnk[par_y])
        rnk[par_x]++;
    }
}
*/

bool checkPrime(ll n)
{
    int cnt=0;
    for(ll i=2;i*i<=n;i++)
    {
        if(n%i == 0)
        {
            if(n/i == i)
                cnt++;
            else
                cnt += 2;
        }
    }
    if(cnt == 2)
        return true;
    else
        return false;
}

/*
const int mx = 1e5;
bool isPrime[mx];
void createSieve()
{
    MEM(isPrime,true);
    for(int i=2;i*i<=mx;i++)
    {
        if(isPrime[i])
        {
            for(int j=i*i;j<=mx;j+=i)
            {
                isPrime[j] = false;
            }
        }
    }
}*/

/*vll f;
vll invf;
void init(){
    f.resize(MAX_N, 1);
    invf.resize(MAX_N, 1);
    repi(MAX_N) f[i] = (f[i-1]*i)%MOD;
    repi(MAX_N) invf[i] = modInverse(f[i],MOD);
}

ll ncr(ll n, ll r){
    return invf[n-r] * ( f[n] * invf[r] % MOD ) % MOD;
}*/

/*bool check_composite(ll n, ll a, ll d, int s) {
    ll x = fast_power_unlocked(a, d, n);
    if (x == 1 || x == n - 1)
        return false;
    for (int r = 1; r < s; r++) {
        x = (ull)x * x % n;
        if (x == n - 1)
            return false;
    }
    return true;
}

bool MillerRabinPrimeCheck(ll n){
    if (n < 2)
        return false;

    int r = 0;
    ll d = n - 1;
    while ((d & 1) == 0) {
        d >>= 1;
        r++;
    }

    for (int a : {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37}) {
        if (n == a)
            return true;
        if (check_composite(n, a, d, r))
            return false;
    }
    return true;
}
*/

const int MAX_N = 1001;

void solve()
{
    string str;
    cin >> str;
    int hash[26] = {0};
    int n = str.size();
    for(int i=0;i<n;i++){
        hash[str[i]-'a']++;
    }
    int od=0;
    for(int i=0;i<26;i++){
        if(hash[i]&1){
            od++;
        }
    }
    if(od==1||od==0){
        cout << "First";
    }
    else
    {
        cout << "Second";
    }
}

int main()
{
    FAST_IO;
    #ifndef ONLINE_JUDGE
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif
//-------------------------------------------------------
        time__("Time Taken"){
            solve();
       }
}


/*
Author: Qaseem Hasan alias Mikepayne14(Codeforces,Atcoder)
                           qaseem_hasan_ (Codechef,HackerRank,HackerEarth)
*/

//---------------------------------------------------------
//#pragma GCC optimize "trapv"

#include <bits/stdc++.h>
using namespace std;
//---------------------------------------------------------

typedef long long int ll;
typedef unsigned long long int ull;
typedef long double ld;
typedef double db;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<char> vc;
typedef vector<vector<int>> vvi;
typedef pair<int,int> pii;
typedef vector<pair<int,int>> vpii;
typedef vector<vector<pair<int,int>>> vvpii;
typedef set<int> seti;
typedef unordered_set<int> us;
typedef unordered_set<int,greater<int>> usrev;
typedef priority_queue <int, vector<int>, greater<int>> revpq;

const int INF = (int)1e9;
const int EPS = 1e-8;
const int MOD  = 1000000007;
const ld PI = 3.14159265359;
const int dx4[4] = {0, 1, 0, -1};
const int dy4[4] = {-1, 0, 1, 0};
const int dx8[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dy8[8] = {-1, 0, 1, 1, 1, 0, -1, -1};

#define acc accumulate
#define eb emplace_back
#define mii map <int,int>
#define F first
#define S second
#define MP make_pair
#define mid(s,e) (s+(e-s)/2)
#define fil(v,x) fill(all(v),x)
#define filcon(v,x) iota(all(v),x)
#define repi(n) for(int i=0;i<n;++i)
#define repj(n) for(int j=0;j<n;++j)
#define repr(n) for(int i=n-1;i>=0;--i)
#define er(v,e) v.erase(std::remove(v.begin(), v.end(), e), v.end())
#define sqr(x) ((x)*(x))
#define MEM(a,b) memset(a, b, sizeof(a))
#define all(cont) cont.begin(), cont.end()
#define rall(cont) cont.end(), cont.begin()
#define FOREACH(it, l) for (auto it = l.begin(); it != l.end(); it++)
#define inrange(i,a,b) ((i>=min(a,b)) && (i<=max(a,b)))
// #define min_all(a,b,c,d,...) min({a,b,c,d,...})
#define PRECISION(x) cout << fixed << setprecision(x)
#define FAST_IO ios::sync_with_stdio(false);
#define make_unique(v) sort(all(v)); v.erase(unique(all(v)), v.end());
#define readfull(s) getline(cin,s)
#define printv(v) for(auto i:v) cout << i << " "
#define trace(x) cout<<#x<<" = { "<<x<<" }\n";
#define khatam '\n'
#define test int t; cin >> t; repi(t) {solve(); cout << khatam;}
#define debug(...) fprintf(stderr, __VA_ARGS__), fflush(stderr)
#define time__(d) \
for ( \
    auto blockTime = make_pair(chrono::high_resolution_clock::now(), true); \
    blockTime.second; \
    debug("%s: %ld ms\n", d, chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - blockTime.first).count()), blockTime.second = false \
)

//--------------------------------------------------------
inline bool grid_inside(int x, int y, int n, int m) {return x >= 1 && x <= n && y >= 1 && y <= m;}

template<typename T>
T lcm(T a,T b)
{
    return (a*b)/__gcd(a,b);
}

template<typename ForwardIterator,typename T>
T first_val(ForwardIterator first,ForwardIterator last,T value)
{
    auto it = std::lower_bound(first,last,value);
    return (it!=last)?(it - first) : -1;
}

template<typename ForwardIterator,typename T>
T last_val(ForwardIterator first,ForwardIterator last,T value)
{
    auto it = std::upper_bound(first,last,value);
    return ((it!=last)?((it - first)-1) : -1);
}

template <typename T> T Dis(T x1,T y1,T x2, T y2)
{return sqrt(sqr(x1-x2) + sqr(y1-y2));}

template <typename T> T Angle(T x1,T y1,T x2, T y2)
{return atan((db)(y1-y2) / (db)(x1-x2));}

int Set(int N,int pos){ return N=N | (1<<pos);}
int Reset(int N,int pos){return N= N & ~(1<<pos);}
bool Check(int N,int pos){return (bool)(N & (1<<pos));}
template< class T, class X > inline T togglebit(T a, X i) { T t=1;return (a^(t<<i));}

//--------------------------------------------------------

bool compare(const pair<int, int>&i, const pair<int, int>&j)
{
    return i.F < j.F;
}

int doubleCompare(double x, double y) {
    if (fabs(x-y) <= EPS)
        return 0;
    if(x < y)
        return -1;
    return 1;
}

int LSOne(ll n){
    return log2(n & -n) + 1;
}

int rangeClear(int n,int i,int j){
    int ones = ~0;
    int a = ones << (j+1);
    int b = (i<<2)-1;
    int mask = a|b;
    int ans = n&mask;
    return ans;
}

int countSetBits(int n)
{
    int count=0;
    while(n>0)
    {
        count += (n&1);
        n = n>>1;
    }
    return count;
}

ll fast_power(ll a,ll x)
{
    if(x==0)
        return 1;
    else if(x==1)
        return a;
    else
    {
        ll R = fast_power(a,x>>1);
        if(!(x&1))
            return R*R;
        else
            return R*a*R;
    }
}

ll fast_power_unlocked(ll a,ll n,ll mod)
{
    ll res = 1;
    while(n > 0)
    {
        if(n&1)
        {
            res = (res*a)%mod;
        }
        a = (a*a)%mod;
        n = n >> 1;
    }
    return res;
}

ll modInverse(ll A,ll M)
{
    return fast_power_unlocked(A,M-2,M);
}

/* DSU
vi par(MAX_N,0);
vi rnk(MAX_N,0);

int find(int x)
{
    if(x==par[x])
        return x;
    return par[x] = find(par[x]);
}

void Union(int x,int y)
{
    int par_x = find(x);
    int par_y = find(y);

    if(par_x == par_y) return;

    if(rnk[par_x] < rnk[par_y])
        swap(par_x,par_y)
    par[par_y] = par_x;

    if(rnk[par_x] == rnk[par_y])
        rnk[par_x]++;
    }
}
*/

bool checkPrime(ll n)
{
    int cnt=0;
    for(ll i=2;i*i<=n;i++)
    {
        if(n%i == 0)
        {
            if(n/i == i)
                cnt++;
            else
                cnt += 2;
        }
    }
    if(cnt == 2)
        return true;
    else
        return false;
}

/*
const int mx = 1e5;
bool isPrime[mx];
void createSieve()
{
    MEM(isPrime,true);
    for(int i=2;i*i<=mx;i++)
    {
        if(isPrime[i])
        {
            for(int j=i*i;j<=mx;j+=i)
            {
                isPrime[j] = false;
            }
        }
    }
}*/

/*vll f;
vll invf;
void init(){
    f.resize(MAX_N, 1);
    invf.resize(MAX_N, 1);
    repi(MAX_N) f[i] = (f[i-1]*i)%MOD;
    repi(MAX_N) invf[i] = modInverse(f[i],MOD);
}

ll ncr(ll n, ll r){
    return invf[n-r] * ( f[n] * invf[r] % MOD ) % MOD;
}*/

/*bool check_composite(ll n, ll a, ll d, int s) {
    ll x = fast_power_unlocked(a, d, n);
    if (x == 1 || x == n - 1)
        return false;
    for (int r = 1; r < s; r++) {
        x = (ull)x * x % n;
        if (x == n - 1)
            return false;
    }
    return true;
}

bool MillerRabinPrimeCheck(ll n){
    if (n < 2)
        return false;

    int r = 0;
    ll d = n - 1;
    while ((d & 1) == 0) {
        d >>= 1;
        r++;
    }

    for (int a : {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37}) {
        if (n == a)
            return true;
        if (check_composite(n, a, d, r))
            return false;
    }
    return true;
}
*/

const int MAX_N = 1001;

void solve()
{
    string str;
    cin >> str;
    int h[26] = {0};
    int n = str.size();
    for(int i=0;i<n;i++){
        h[str[i]-'a']++;
    }
    int od=0;
    for(int i=0;i<26;i++){
        if(h[i]&1){
            od++;
        }
    }
    for(int i=0;i<26;i++)
        cout << h[i] << " ";
    cout << khatam;
    if(n&1||od==0){
        cout << "First";
    }
    else
    {
        cout << "Second";
    }
}

int main()
{
    FAST_IO;
    #ifndef ONLINE_JUDGE
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif
//-------------------------------------------------------
        time__("Time Taken"){
            solve();
       }
}


/*
Author: Qaseem Hasan alias Mikepayne14(Codeforces,Atcoder)
                           qaseem_hasan_ (Codechef,HackerRank,HackerEarth)
*/

//---------------------------------------------------------
//#pragma GCC optimize "trapv"

#include <bits/stdc++.h>
using namespace std;
//---------------------------------------------------------

typedef long long int ll;
typedef unsigned long long int ull;
typedef long double ld;
typedef double db;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<char> vc;
typedef vector<vector<int>> vvi;
typedef pair<int,int> pii;
typedef vector<pair<int,int>> vpii;
typedef vector<vector<pair<int,int>>> vvpii;
typedef set<int> seti;
typedef unordered_set<int> us;
typedef unordered_set<int,greater<int>> usrev;
typedef priority_queue <int, vector<int>, greater<int>> revpq;

const int INF = (int)1e9;
const int EPS = 1e-8;
const int MOD  = 1000000007;
const ld PI = 3.14159265359;
const int dx4[4] = {0, 1, 0, -1};
const int dy4[4] = {-1, 0, 1, 0};
const int dx8[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dy8[8] = {-1, 0, 1, 1, 1, 0, -1, -1};

#define acc accumulate
#define eb emplace_back
#define mii map <int,int>
#define F first
#define S second
#define MP make_pair
#define mid(s,e) (s+(e-s)/2)
#define fil(v,x) fill(all(v),x)
#define filcon(v,x) iota(all(v),x)
#define repi(n) for(int i=0;i<n;++i)
#define repj(n) for(int j=0;j<n;++j)
#define repr(n) for(int i=n-1;i>=0;--i)
#define er(v,e) v.erase(std::remove(v.begin(), v.end(), e), v.end())
#define sqr(x) ((x)*(x))
#define MEM(a,b) memset(a, b, sizeof(a))
#define all(cont) cont.begin(), cont.end()
#define rall(cont) cont.end(), cont.begin()
#define FOREACH(it, l) for (auto it = l.begin(); it != l.end(); it++)
#define inrange(i,a,b) ((i>=min(a,b)) && (i<=max(a,b)))
// #define min_all(a,b,c,d,...) min({a,b,c,d,...})
#define PRECISION(x) cout << fixed << setprecision(x)
#define FAST_IO ios::sync_with_stdio(false);
#define make_unique(v) sort(all(v)); v.erase(unique(all(v)), v.end());
#define readfull(s) getline(cin,s)
#define printv(v) for(auto i:v) cout << i << " "
#define trace(x) cout<<#x<<" = { "<<x<<" }\n";
#define khatam '\n'
#define test int t; cin >> t; repi(t) {solve(); cout << khatam;}
#define debug(...) fprintf(stderr, __VA_ARGS__), fflush(stderr)
#define time__(d) \
for ( \
    auto blockTime = make_pair(chrono::high_resolution_clock::now(), true); \
    blockTime.second; \
    debug("%s: %ld ms\n", d, chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - blockTime.first).count()), blockTime.second = false \
)

//--------------------------------------------------------
inline bool grid_inside(int x, int y, int n, int m) {return x >= 1 && x <= n && y >= 1 && y <= m;}

template<typename T>
T lcm(T a,T b)
{
    return (a*b)/__gcd(a,b);
}

template<typename ForwardIterator,typename T>
T first_val(ForwardIterator first,ForwardIterator last,T value)
{
    auto it = std::lower_bound(first,last,value);
    return (it!=last)?(it - first) : -1;
}

template<typename ForwardIterator,typename T>
T last_val(ForwardIterator first,ForwardIterator last,T value)
{
    auto it = std::upper_bound(first,last,value);
    return ((it!=last)?((it - first)-1) : -1);
}

template <typename T> T Dis(T x1,T y1,T x2, T y2)
{return sqrt(sqr(x1-x2) + sqr(y1-y2));}

template <typename T> T Angle(T x1,T y1,T x2, T y2)
{return atan((db)(y1-y2) / (db)(x1-x2));}

int Set(int N,int pos){ return N=N | (1<<pos);}
int Reset(int N,int pos){return N= N & ~(1<<pos);}
bool Check(int N,int pos){return (bool)(N & (1<<pos));}
template< class T, class X > inline T togglebit(T a, X i) { T t=1;return (a^(t<<i));}

//--------------------------------------------------------

bool compare(const pair<int, int>&i, const pair<int, int>&j)
{
    return i.F < j.F;
}

int doubleCompare(double x, double y) {
    if (fabs(x-y) <= EPS)
        return 0;
    if(x < y)
        return -1;
    return 1;
}

int LSOne(ll n){
    return log2(n & -n) + 1;
}

int rangeClear(int n,int i,int j){
    int ones = ~0;
    int a = ones << (j+1);
    int b = (i<<2)-1;
    int mask = a|b;
    int ans = n&mask;
    return ans;
}

int countSetBits(int n)
{
    int count=0;
    while(n>0)
    {
        count += (n&1);
        n = n>>1;
    }
    return count;
}

ll fast_power(ll a,ll x)
{
    if(x==0)
        return 1;
    else if(x==1)
        return a;
    else
    {
        ll R = fast_power(a,x>>1);
        if(!(x&1))
            return R*R;
        else
            return R*a*R;
    }
}

ll fast_power_unlocked(ll a,ll n,ll mod)
{
    ll res = 1;
    while(n > 0)
    {
        if(n&1)
        {
            res = (res*a)%mod;
        }
        a = (a*a)%mod;
        n = n >> 1;
    }
    return res;
}

ll modInverse(ll A,ll M)
{
    return fast_power_unlocked(A,M-2,M);
}

/* DSU
vi par(MAX_N,0);
vi rnk(MAX_N,0);

int find(int x)
{
    if(x==par[x])
        return x;
    return par[x] = find(par[x]);
}

void Union(int x,int y)
{
    int par_x = find(x);
    int par_y = find(y);

    if(par_x == par_y) return;

    if(rnk[par_x] < rnk[par_y])
        swap(par_x,par_y)
    par[par_y] = par_x;

    if(rnk[par_x] == rnk[par_y])
        rnk[par_x]++;
    }
}
*/

bool checkPrime(ll n)
{
    int cnt=0;
    for(ll i=2;i*i<=n;i++)
    {
        if(n%i == 0)
        {
            if(n/i == i)
                cnt++;
            else
                cnt += 2;
        }
    }
    if(cnt == 2)
        return true;
    else
        return false;
}

/*
const int mx = 1e5;
bool isPrime[mx];
void createSieve()
{
    MEM(isPrime,true);
    for(int i=2;i*i<=mx;i++)
    {
        if(isPrime[i])
        {
            for(int j=i*i;j<=mx;j+=i)
            {
                isPrime[j] = false;
            }
        }
    }
}*/

/*vll f;
vll invf;
void init(){
    f.resize(MAX_N, 1);
    invf.resize(MAX_N, 1);
    repi(MAX_N) f[i] = (f[i-1]*i)%MOD;
    repi(MAX_N) invf[i] = modInverse(f[i],MOD);
}

ll ncr(ll n, ll r){
    return invf[n-r] * ( f[n] * invf[r] % MOD ) % MOD;
}*/

/*bool check_composite(ll n, ll a, ll d, int s) {
    ll x = fast_power_unlocked(a, d, n);
    if (x == 1 || x == n - 1)
        return false;
    for (int r = 1; r < s; r++) {
        x = (ull)x * x % n;
        if (x == n - 1)
            return false;
    }
    return true;
}

bool MillerRabinPrimeCheck(ll n){
    if (n < 2)
        return false;

    int r = 0;
    ll d = n - 1;
    while ((d & 1) == 0) {
        d >>= 1;
        r++;
    }

    for (int a : {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37}) {
        if (n == a)
            return true;
        if (check_composite(n, a, d, r))
            return false;
    }
    return true;
}
*/

const int MAX_N = 1001;

void solve()
{
    string str;
    cin >> str;
    int h[26] = {0};
    int n = str.size();
    for(int i=0;i<n;i++){
        h[str[i]-'a']++;
    }
    int od=0;
    for(int i=0;i<26;i++){
        if(h[i]&1){
            od++;
        }
    }
    if(n&1||od==0){
        cout << "First";
    }
    else
    {
        cout << "Second";
    }
}

int main()
{
    FAST_IO;
    #ifndef ONLINE_JUDGE
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif
//-------------------------------------------------------
        time__("Time Taken"){
            solve();
       }
}


/*
Author: Qaseem Hasan alias Mikepayne14(Codeforces,Atcoder)
                           qaseem_hasan_ (Codechef,HackerRank,HackerEarth)
*/

//---------------------------------------------------------
//#pragma GCC optimize "trapv"

#include <bits/stdc++.h>
using namespace std;
//---------------------------------------------------------

typedef long long int ll;
typedef unsigned long long int ull;
typedef long double ld;
typedef double db;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<char> vc;
typedef vector<vector<int>> vvi;
typedef pair<int,int> pii;
typedef vector<pair<int,int>> vpii;
typedef vector<vector<pair<int,int>>> vvpii;
typedef set<int> seti;
typedef unordered_set<int> us;
typedef unordered_set<int,greater<int>> usrev;
typedef priority_queue <int, vector<int>, greater<int>> revpq;

const int INF = (int)1e9;
const int EPS = 1e-8;
const int MOD  = 1000000007;
const ld PI = 3.14159265359;
const int dx4[4] = {0, 1, 0, -1};
const int dy4[4] = {-1, 0, 1, 0};
const int dx8[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dy8[8] = {-1, 0, 1, 1, 1, 0, -1, -1};

#define acc accumulate
#define eb emplace_back
#define mii map <int,int>
#define F first
#define S second
#define MP make_pair
#define mid(s,e) (s+(e-s)/2)
#define fil(v,x) fill(all(v),x)
#define filcon(v,x) iota(all(v),x)
#define repi(n) for(int i=0;i<n;++i)
#define repj(n) for(int j=0;j<n;++j)
#define repr(n) for(int i=n-1;i>=0;--i)
#define er(v,e) v.erase(std::remove(v.begin(), v.end(), e), v.end())
#define sqr(x) ((x)*(x))
#define MEM(a,b) memset(a, b, sizeof(a))
#define all(cont) cont.begin(), cont.end()
#define rall(cont) cont.end(), cont.begin()
#define FOREACH(it, l) for (auto it = l.begin(); it != l.end(); it++)
#define inrange(i,a,b) ((i>=min(a,b)) && (i<=max(a,b)))
// #define min_all(a,b,c,d,...) min({a,b,c,d,...})
#define PRECISION(x) cout << fixed << setprecision(x)
#define FAST_IO ios::sync_with_stdio(false);
#define make_unique(v) sort(all(v)); v.erase(unique(all(v)), v.end());
#define readfull(s) getline(cin,s)
#define printv(v) for(auto i:v) cout << i << " "
#define trace(x) cout<<#x<<" = { "<<x<<" }\n";
#define khatam '\n'
#define test int t; cin >> t; repi(t) {solve(); cout << khatam;}
#define debug(...) fprintf(stderr, __VA_ARGS__), fflush(stderr)
#define time__(d) \
for ( \
    auto blockTime = make_pair(chrono::high_resolution_clock::now(), true); \
    blockTime.second; \
    debug("%s: %ld ms\n", d, chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - blockTime.first).count()), blockTime.second = false \
)

//--------------------------------------------------------
inline bool grid_inside(int x, int y, int n, int m) {return x >= 1 && x <= n && y >= 1 && y <= m;}

template<typename T>
T lcm(T a,T b)
{
    return (a*b)/__gcd(a,b);
}

template<typename ForwardIterator,typename T>
T first_val(ForwardIterator first,ForwardIterator last,T value)
{
    auto it = std::lower_bound(first,last,value);
    return (it!=last)?(it - first) : -1;
}

template<typename ForwardIterator,typename T>
T last_val(ForwardIterator first,ForwardIterator last,T value)
{
    auto it = std::upper_bound(first,last,value);
    return ((it!=last)?((it - first)-1) : -1);
}

template <typename T> T Dis(T x1,T y1,T x2, T y2)
{return sqrt(sqr(x1-x2) + sqr(y1-y2));}

template <typename T> T Angle(T x1,T y1,T x2, T y2)
{return atan((db)(y1-y2) / (db)(x1-x2));}

int Set(int N,int pos){ return N=N | (1<<pos);}
int Reset(int N,int pos){return N= N & ~(1<<pos);}
bool Check(int N,int pos){return (bool)(N & (1<<pos));}
template< class T, class X > inline T togglebit(T a, X i) { T t=1;return (a^(t<<i));}

//--------------------------------------------------------

bool compare(const pair<int, int>&i, const pair<int, int>&j)
{
    return i.F < j.F;
}

int doubleCompare(double x, double y) {
    if (fabs(x-y) <= EPS)
        return 0;
    if(x < y)
        return -1;
    return 1;
}

int LSOne(ll n){
    return log2(n & -n) + 1;
}

int rangeClear(int n,int i,int j){
    int ones = ~0;
    int a = ones << (j+1);
    int b = (i<<2)-1;
    int mask = a|b;
    int ans = n&mask;
    return ans;
}

int countSetBits(int n)
{
    int count=0;
    while(n>0)
    {
        count += (n&1);
        n = n>>1;
    }
    return count;
}

ll fast_power(ll a,ll x)
{
    if(x==0)
        return 1;
    else if(x==1)
        return a;
    else
    {
        ll R = fast_power(a,x>>1);
        if(!(x&1))
            return R*R;
        else
            return R*a*R;
    }
}

ll fast_power_unlocked(ll a,ll n,ll mod)
{
    ll res = 1;
    while(n > 0)
    {
        if(n&1)
        {
            res = (res*a)%mod;
        }
        a = (a*a)%mod;
        n = n >> 1;
    }
    return res;
}

ll modInverse(ll A,ll M)
{
    return fast_power_unlocked(A,M-2,M);
}

/* DSU
vi par(MAX_N,0);
vi rnk(MAX_N,0);

int find(int x)
{
    if(x==par[x])
        return x;
    return par[x] = find(par[x]);
}

void Union(int x,int y)
{
    int par_x = find(x);
    int par_y = find(y);

    if(par_x == par_y) return;

    if(rnk[par_x] < rnk[par_y])
        swap(par_x,par_y)
    par[par_y] = par_x;

    if(rnk[par_x] == rnk[par_y])
        rnk[par_x]++;
    }
}
*/

bool checkPrime(ll n)
{
    int cnt=0;
    for(ll i=2;i*i<=n;i++)
    {
        if(n%i == 0)
        {
            if(n/i == i)
                cnt++;
            else
                cnt += 2;
        }
    }
    if(cnt == 2)
        return true;
    else
        return false;
}

/*
const int mx = 1e5;
bool isPrime[mx];
void createSieve()
{
    MEM(isPrime,true);
    for(int i=2;i*i<=mx;i++)
    {
        if(isPrime[i])
        {
            for(int j=i*i;j<=mx;j+=i)
            {
                isPrime[j] = false;
            }
        }
    }
}*/

/*vll f;
vll invf;
void init(){
    f.resize(MAX_N, 1);
    invf.resize(MAX_N, 1);
    repi(MAX_N) f[i] = (f[i-1]*i)%MOD;
    repi(MAX_N) invf[i] = modInverse(f[i],MOD);
}

ll ncr(ll n, ll r){
    return invf[n-r] * ( f[n] * invf[r] % MOD ) % MOD;
}*/

/*bool check_composite(ll n, ll a, ll d, int s) {
    ll x = fast_power_unlocked(a, d, n);
    if (x == 1 || x == n - 1)
        return false;
    for (int r = 1; r < s; r++) {
        x = (ull)x * x % n;
        if (x == n - 1)
            return false;
    }
    return true;
}

bool MillerRabinPrimeCheck(ll n){
    if (n < 2)
        return false;

    int r = 0;
    ll d = n - 1;
    while ((d & 1) == 0) {
        d >>= 1;
        r++;
    }

    for (int a : {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37}) {
        if (n == a)
            return true;
        if (check_composite(n, a, d, r))
            return false;
    }
    return true;
}
*/

const int MAX_N = 1001;

void solve()
{
    string str;
    cin >> str;
    int hash[26] = {0};
    int n = str.size();
    for(int i=0;i<n;i++){
        hash[str[i]-'a']++;
    }
    int od=0;
    for(int i=0;i<26;i++){
        if(hash[i]&1){
            od++;
        }
    }
    if(od==1){
        cout << "First";
    }
    else
    {
        cout << "Second";
    }
}

int main()
{
    FAST_IO;
    #ifndef ONLINE_JUDGE
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif
//-------------------------------------------------------
        time__("Time Taken"){
            solve();
       }
}


/*
Author: Qaseem Hasan alias Mikepayne14(Codeforces,Atcoder)
                           qaseem_hasan_ (Codechef,HackerRank,HackerEarth)
*/

//---------------------------------------------------------
//#pragma GCC optimize "trapv"

#include <bits/stdc++.h>
using namespace std;
//---------------------------------------------------------

typedef long long int ll;
typedef unsigned long long int ull;
typedef long double ld;
typedef double db;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<char> vc;
typedef vector<vector<int>> vvi;
typedef pair<int,int> pii;
typedef vector<pair<int,int>> vpii;
typedef vector<vector<pair<int,int>>> vvpii;
typedef set<int> seti;
typedef unordered_set<int> us;
typedef unordered_set<int,greater<int>> usrev;
typedef priority_queue <int, vector<int>, greater<int>> revpq;

const int INF = (int)1e9;
const int EPS = 1e-8;
const int MOD  = 1000000007;
const ld PI = 3.14159265359;
const int dx4[4] = {0, 1, 0, -1};
const int dy4[4] = {-1, 0, 1, 0};
const int dx8[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
const int dy8[8] = {-1, 0, 1, 1, 1, 0, -1, -1};

#define acc accumulate
#define eb emplace_back
#define mii map <int,int>
#define F first
#define S second
#define MP make_pair
#define mid(s,e) (s+(e-s)/2)
#define fil(v,x) fill(all(v),x)
#define filcon(v,x) iota(all(v),x)
#define repi(n) for(int i=0;i<n;++i)
#define repj(n) for(int j=0;j<n;++j)
#define repr(n) for(int i=n-1;i>=0;--i)
#define er(v,e) v.erase(std::remove(v.begin(), v.end(), e), v.end())
#define sqr(x) ((x)*(x))
#define MEM(a,b) memset(a, b, sizeof(a))
#define all(cont) cont.begin(), cont.end()
#define rall(cont) cont.end(), cont.begin()
#define FOREACH(it, l) for (auto it = l.begin(); it != l.end(); it++)
#define inrange(i,a,b) ((i>=min(a,b)) && (i<=max(a,b)))
// #define min_all(a,b,c,d,...) min({a,b,c,d,...})
#define PRECISION(x) cout << fixed << setprecision(x)
#define FAST_IO ios::sync_with_stdio(false);
#define make_unique(v) sort(all(v)); v.erase(unique(all(v)), v.end());
#define readfull(s) getline(cin,s)
#define printv(v) for(auto i:v) cout << i << " "
#define trace(x) cout<<#x<<" = { "<<x<<" }\n";
#define khatam '\n'
#define test int t; cin >> t; repi(t) {solve(); cout << khatam;}
#define debug(...) fprintf(stderr, __VA_ARGS__), fflush(stderr)
#define time__(d) \
for ( \
    auto blockTime = make_pair(chrono::high_resolution_clock::now(), true); \
    blockTime.second; \
    debug("%s: %ld ms\n", d, chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - blockTime.first).count()), blockTime.second = false \
)

//--------------------------------------------------------
inline bool grid_inside(int x, int y, int n, int m) {return x >= 1 && x <= n && y >= 1 && y <= m;}

template<typename T>
T lcm(T a,T b)
{
    return (a*b)/__gcd(a,b);
}

template<typename ForwardIterator,typename T>
T first_val(ForwardIterator first,ForwardIterator last,T value)
{
    auto it = std::lower_bound(first,last,value);
    return (it!=last)?(it - first) : -1;
}

template<typename ForwardIterator,typename T>
T last_val(ForwardIterator first,ForwardIterator last,T value)
{
    auto it = std::upper_bound(first,last,value);
    return ((it!=last)?((it - first)-1) : -1);
}

template <typename T> T Dis(T x1,T y1,T x2, T y2)
{return sqrt(sqr(x1-x2) + sqr(y1-y2));}

template <typename T> T Angle(T x1,T y1,T x2, T y2)
{return atan((db)(y1-y2) / (db)(x1-x2));}

int Set(int N,int pos){ return N=N | (1<<pos);}
int Reset(int N,int pos){return N= N & ~(1<<pos);}
bool Check(int N,int pos){return (bool)(N & (1<<pos));}
template< class T, class X > inline T togglebit(T a, X i) { T t=1;return (a^(t<<i));}

//--------------------------------------------------------

bool compare(const pair<int, int>&i, const pair<int, int>&j)
{
    return i.F < j.F;
}

int doubleCompare(double x, double y) {
    if (fabs(x-y) <= EPS)
        return 0;
    if(x < y)
        return -1;
    return 1;
}

int LSOne(ll n){
    return log2(n & -n) + 1;
}

int rangeClear(int n,int i,int j){
    int ones = ~0;
    int a = ones << (j+1);
    int b = (i<<2)-1;
    int mask = a|b;
    int ans = n&mask;
    return ans;
}

int countSetBits(int n)
{
    int count=0;
    while(n>0)
    {
        count += (n&1);
        n = n>>1;
    }
    return count;
}

ll fast_power(ll a,ll x)
{
    if(x==0)
        return 1;
    else if(x==1)
        return a;
    else
    {
        ll R = fast_power(a,x>>1);
        if(!(x&1))
            return R*R;
        else
            return R*a*R;
    }
}

ll fast_power_unlocked(ll a,ll n,ll mod)
{
    ll res = 1;
    while(n > 0)
    {
        if(n&1)
        {
            res = (res*a)%mod;
        }
        a = (a*a)%mod;
        n = n >> 1;
    }
    return res;
}

ll modInverse(ll A,ll M)
{
    return fast_power_unlocked(A,M-2,M);
}

/* DSU
vi par(MAX_N,0);
vi rnk(MAX_N,0);

int find(int x)
{
    if(x==par[x])
        return x;
    return par[x] = find(par[x]);
}

void Union(int x,int y)
{
    int par_x = find(x);
    int par_y = find(y);

    if(par_x == par_y) return;

    if(rnk[par_x] < rnk[par_y])
        swap(par_x,par_y)
    par[par_y] = par_x;

    if(rnk[par_x] == rnk[par_y])
        rnk[par_x]++;
    }
}
*/

bool checkPrime(ll n)
{
    int cnt=0;
    for(ll i=2;i*i<=n;i++)
    {
        if(n%i == 0)
        {
            if(n/i == i)
                cnt++;
            else
                cnt += 2;
        }
    }
    if(cnt == 2)
        return true;
    else
        return false;
}

/*
const int mx = 1e5;
bool isPrime[mx];
void createSieve()
{
    MEM(isPrime,true);
    for(int i=2;i*i<=mx;i++)
    {
        if(isPrime[i])
        {
            for(int j=i*i;j<=mx;j+=i)
            {
                isPrime[j] = false;
            }
        }
    }
}*/

/*vll f;
vll invf;
void init(){
    f.resize(MAX_N, 1);
    invf.resize(MAX_N, 1);
    repi(MAX_N) f[i] = (f[i-1]*i)%MOD;
    repi(MAX_N) invf[i] = modInverse(f[i],MOD);
}

ll ncr(ll n, ll r){
    return invf[n-r] * ( f[n] * invf[r] % MOD ) % MOD;
}*/

/*bool check_composite(ll n, ll a, ll d, int s) {
    ll x = fast_power_unlocked(a, d, n);
    if (x == 1 || x == n - 1)
        return false;
    for (int r = 1; r < s; r++) {
        x = (ull)x * x % n;
        if (x == n - 1)
            return false;
    }
    return true;
}

bool MillerRabinPrimeCheck(ll n){
    if (n < 2)
        return false;

    int r = 0;
    ll d = n - 1;
    while ((d & 1) == 0) {
        d >>= 1;
        r++;
    }

    for (int a : {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37}) {
        if (n == a)
            return true;
        if (check_composite(n, a, d, r))
            return false;
    }
    return true;
}
*/

const int MAX_N = 1001;

void solve()
{
    string str;
    cin >> str;
    int h[26] = {0};
    int n = str.size();
    for(int i=0;i<n;i++){
        h[str[i]-'a']++;
    }
    int od=0;
    for(int i=0;i<26;i++){
        if(h[i]&1){
            od++;
        }
    }
    if(od==1||od==0){
        cout << "First";
    }
    else
    {
        cout << "Second";
    }
}

int main()
{
    FAST_IO;
    #ifndef ONLINE_JUDGE
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif
//-------------------------------------------------------
        time__("Time Taken"){
            solve();
       }
}


#include <bits/stdc++.h>
using namespace std;

bool is_palindrome(string s)
{	string p = s;
	reverse(p.begin(), p.end());
	if (p == s)return true;
	else
		return false;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int cur = 1;
	string  s, p, t ; bool flag = false, global_flag = false;
	cin >> s;
	if (is_palindrome(s))
		cout << "First";
	else
	{
		while (s.length() != 1)
		{
			global_flag = true ;
			for (int i = 0 ; i < s.size() ; i++)
			{

				flag = false ;
				p = s;
				p.erase(p.begin() + i);
				sort(p.begin(), p.end());
				t = p;

				if (is_palindrome(p))
					flag = true;
				while (!flag && next_permutation(p.begin(), p.end()))
				{

					if (is_palindrome(s))
					{
						flag = true;

					}
					else
					{
						global_flag = false;
					}
				}
				if (flag == false)
				{
					s = t;
					break;
				}
			}
			if (global_flag == true)
			{
				if (cur == 1)
					cout << "Second";
				else
					cout << "First";
				break;
			}
		}
	}
	return 0;
}


#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int amt[26];
    string s;
    cin >> s;
    for (int i = 0; i < s.size() ; i++)
    {
        amt[ch[i] - 'a']++;
    }
    for (int i = 0; i < 26; i++)
    {
        if (amt[i] % 2 == 1) count_odd++;
    }
    if (count_odd == 0 || count_odd == 1)
        printf("First\n");
    else if (count_odd % 2 == 0)
    {
        printf("Second\n");
    }
    else
        printf("First\n");
    return 0;
}


#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int amt[26], count_odd = 0;
    string s;
    cin >> s;
    for (int i = 0  ; i < 26 ; i++)
    {
        amt[i] = 0;
    }
    for (int i = 0; i < s.size() ; i++)
    {
        amt[s[i] - 'a']++;
    }

    for (int i = 0; i < 26; i++)
    {
        if (amt[i] % 2 == 1) count_odd++;
    }
    if (count_odd == 0 || count_odd == 1)
        printf("First\n");
    else if (count_odd % 2 == 0)
    {
        printf("Second\n");
    }
    else
        printf("First\n");
    return 0;
}


#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int amt[26], count_odd = 0;
    string s;
    cin >> s;
    for (int i = 0; i < s.size() ; i++)
    {
        amt[s[i] - 'a']++;
    }
    for (int i = 0; i < 26; i++)
    {
        if (amt[i] % 2 == 1) count_odd++;
    }
    if (count_odd == 0 || count_odd == 1)
        printf("First\n");
    else if (count_odd % 2 == 0)
    {
        printf("Second\n");
    }
    else
        printf("First\n");
    return 0;
}


#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int amt[26];
    string s;
    cin >> s;
    for (int i = 0; i < s.size() ; i++)
    {
        amt[ch[i] - 'a']++;
    }
    for (int i = 0; i < 26; i++)
    {
        if (amt[i] % 2 == 1) count_odd++;
    }
    if (count_odd == 0 || count_odd == 1)
        printf("First\n");
    else if (count_odd % 2 == 0)
    {
        printf("Second\n");
    }
    else
        printf("First\n");
    return 0;


#include <bits/stdc++.h>

using namespace std;

void run_case(void)
{
	char string[1001];
	scanf("%s", string);

	vector<int> x(26, 0);

	for(size_t i=0; i<strlen(string); i++) {
		x[string[i]-'a']++;
	}
	int odd = 0;
	for(int i=0; i<26; i++) if(x[i]%2)odd++;

	cout<<odd<<endl;

	cout<<((!(odd-1)|| (odd%2)?"First\n":"Second\n"));
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	//int t;
	//cin >> t;

	//while(t--)
	run_case();

	return 0;
}


#include <bits/stdc++.h>

using namespace std;

void run_case(void)
{
	char string[1001];
	scanf("%s", string);

	vector<int> x(26, 0);

	for(size_t i=0; i<strlen(string); i++) {
		x[string[i]-'a']++;
	}
	int odd = 0;
	for(int i=0; i<26; i++) if(x[i]%2)odd++;

	//cout<<odd<<endl;

	cout<<((!(odd-1)|| (odd%2)?"First\n":"Second\n"));
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	//int t;
	//cin >> t;

	//while(t--)
	run_case();

	return 0;
}


#include <bits/stdc++.h>

using namespace std;

void run_case(void)
{
	char string[1001];
	scanf("%s", string);

	vector<int> x(26, 0);

	for(size_t i=0; i<strlen(string); i++) {
		x[string[i]-'a']++;
	}
	int odd = 0;
	for(int i=0; i<26; i++) if(x[i]%2);

	cout<<odd<<endl;

	cout<<((!(odd-1)|| (odd%2)?"First\n":"Second\n"));
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	//int t;
	//cin >> t;

	//while(t--)
	run_case();

	return 0;
}


#include <bits/stdc++.h>

using namespace std;

void run_case(void)
{
	char string[1001];
	scanf("%s", string);

	int i = 0;
	int j = strlen(string) - 1;
	int count = 1;

	while(i<j){
		if(string[i] == string[j]){
			i++;
			j--;
		}else{
			if(string[i] == string[j-1]){
				string[j] = '.';
				j--;
				count++;
			}else if(string[i+1] == string[j]){
				string[i+1] = '.';
				i++;
				count++;
			}else{
				string[i] = '.';
				string[j] = '.';
				count+=2;
			}
		}
		//cout<<i<<" "<<j<<endl;
	}//cout<<string<<endl;
	if(count%2) cout<<"First\n";
	else cout<<"Second\n";
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	//int t;
	//cin >> t;

	//while(t--)
	run_case();

	return 0;
}


#include <bits/stdc++.h>

using namespace std;

void run_case(void)
{
	char string[1001];
	scanf("%s", string);

	int i = 0;
	int j = strlen(string) - 1;
	int count = 1;

	while(i<j){
		if(string[i] == string[j]){
			i++;
			j--;
		}else{
			if(string[i] == string[i+1] && string[j] == string[j-1]){
				i+=2;
				j-=2;
			}
			else if(string[i] == string[j-1]){
				string[j] = '.';
				j--;
				count++;
			}else if(string[i+1] == string[j]){
				string[i+1] = '.';
				i++;
				count++;
			}else{
				string[i] = '.';
				string[j] = '.';
				count+=2;
			}
		}
		//cout<<i<<" "<<j<<endl;
	}//cout<<string<<endl;
	if(count%2) cout<<"First\n";
	else cout<<"Second\n";
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	//int t;
	//cin >> t;

	//while(t--)
	run_case();

	return 0;
}


#include <bits/stdc++.h>

using namespace std;

void run_case(void)
{
	char string[1001];
	scanf("%s", string);

	vector<int> x(26, 0);

	for(size_t i=0; i<strlen(string); i++) {
		x[string[i]-'a']++;
	}
	int odd = 0;
	for(int i=0; i<26; i++) if(x[i]%2)odd++;

	//cout<<odd<<endl;

	cout<<((!(odd)|| (odd%2)?"First\n":"Second\n"));
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	//int t;
	//cin >> t;

	//while(t--)
	run_case();

	return 0;
}


    #include<bits//stdc++.h>
    using namespace std;
    int main(){
        long int n,a[100005],index[100005],next[100005],i,j=0,cnt;
        priority_queue<int>p;
        scanf("%ld",&n);
        for(i=0;i<n;i++){
            scanf("%ld",&a[i]);
            next[a[i]]=-1;
            index[a[i]]=0;
        }
        for(i=0;i<n;i++){
            if(next[a[i]]>=0){
                if((index[a[i]] > 0) && (index[a[i]]!=i-next[a[i]])){
                    index[a[i]]=-1;
                    next[a[i]]=-1;
                    j=-1;
                }
                else {
                    index[a[i]]=i-next[a[i]];
                    j=0;
                }
            }

            if(j==0)next[a[i]] = i;
            j=0;
            p.push(a[i]);

        }
        i=0;
        int ans[100005];
        while(!p.empty()){
            if((i==0 || ans[i-1]!=p.top()) && index[p.top()]!=-1){
                ans[i]=p.top();
                i++;
            }
            p.pop();
        }
        cnt=i;
        cout<<cnt<<endl;
        for(i=cnt-1;i>=0;i--){
            cout<<ans[i]<<" "<<index[ans[i]]<<endl;
        }
        return 0;
    }


#include<bits//stdc++.h>
using namespace std;
int main(){
    char s[1003];
    int l,i,j,index[26]={0},remove=0,a;
    cin>>s;
    l = strlen(s);
    for(i=0;i<l;i++){
        a=s[i]-'a';
        index[a]++;
    }
    int cnt=0;
    for(j=0;j<26;j++){
        if(index[j]%2!=0){

            remove++;
        }
    }
    if(remove<=1)printf("First\n");
    else if(remove%2!=0)printf("First\n");
    else printf("Second\n");
    return 0;
}


#include<bits//stdc++.h>
using namespace std;
int main(){
    char s[1003];
    int l,i,j,k=0,index[26]={0},loop,a;
    cin>>s;
    l = strlen(s);
    for(i=0;i<l;i++){
        a=s[i]-'a';
        index[a]++;
    }
    int cnt=0;
    for(j=0;j<25;j++){
        if(index[j]%2!=0){
            k=1;
            cnt++;
        }
        //printf("\n%d",index[j]);
    }
    if(k==0 || cnt==1)printf("First\n");
    else printf("Second\n");
    return 0;
}


#include<bits//stdc++.h>
using namespace std;
int main(){
    char s[1003];
    int l,i,j,k,index[1003]={0},loop;
    cin>>s;
    l = strlen(s);
    k=l-1;
    if(l%2!=0)loop=l/2+1;
    else loop=l/2;
    for(i=0;i<loop;i++){
        int c=0;
        for(j=k;j>i;j--){

            if(s[i]==s[j]){
                index[j]=1;
                index[i]=1;
                k=j-1;
                j=0;
                c=1;
            }
            else index[j]=-1;
        }
        if(c==0 && index[i]!=1)index[i]=-2;
    }
    i=0;
    int c=0;
    while(i<l){

        if(index[i]==-1)c++;
        i++;
    }
    if(c%2==0)printf("First\n");
    else printf("Second\n");
    return 0;
}


#include<bits//stdc++.h>
using namespace std;
int main(){
    long long int test,n,a[200005],i,index,m,ans;
    priority_queue<int>p;
    scanf("%lld",&test);
    while(test--){
        bool check=true;
        bool check2=true;
        ans=0;
        m=0;
        scanf("%lld",&n);
        for(i=0;i<n;i++){
            scanf("%lld",&a[i]);
            if(a[i]>m){index=i;m=a[i];}
        }
        if(index<m){
            for(i=0;i<m;i++)p.push(a[i]);
            i=m;
            while(!p.empty()){
                if(p.top()!=i) check=false;
                p.pop();
                i--;
            }
            if(check){
                for(i=m;i<n;i++)p.push(a[i]);
                i=n-m;
                while(!p.empty()){
                    if(p.top()!=i) check=false;
                    p.pop();
                    i--;
                }
            }
            if(check){ans++;}
        }
        else check=false;
        if(index>=(n-m)){
            for(i=0;i<(n-m);i++)p.push(a[i]);
            i=n-m;
            while(!p.empty()){
                if(p.top()!=i) check2=false;
                p.pop();
                i--;
            }
            if(check2 && n>m){
                for(i=n-m;i<n;i++)p.push(a[i]);
                i=m;
                while(!p.empty()){
                    if(p.top()!=i) check2=false;
                    p.pop();
                    i--;
                }
            }
            else check2=false;

            if(check2)ans++;
        }
        else check2=false;
        if(!check && !check2) printf("0\n");
        else {
            printf("%lld\n",ans);
            if(check)printf("%lld %lld\n",m,n-m);
            if(check2)printf("%lld %lld\n",n-m,m);
        }
    }
    return 0;
}


#include<bits//stdc++.h>
using namespace std;
int main(){
    char s[1003];
    int l,i,j,k=0,index[26]={0},remove=0,a;
    cin>>s;
    l = strlen(s);
    for(i=0;i<l;i++){
        a=s[i]-'a';
        index[a]++;
    }
    int cnt=0;
    for(j=0;j<25;j++){
        if(index[j]%2!=0){
            if(cnt>0){
                remove+=index[j];
            }
            cnt++;
        }
    }
    //cout<<remove<<endl;
    if(remove%2==0)printf("First\n");
    else printf("Second\n");
    return 0;
}


#include <iostream>

using namespace std;

int main(){
    string names[2] = {"First", "Second"};
    char c;
    bool even[25], result = true, odd = false; // 97 - 122
    int i;
    for(i=0; i<25; i++){
        even[i] = true;
    }
    while(cin >> c){
        i = int(c)-97;
        //cout << i << " ";
        if(i >= 0 && i < 25){
            even[int(c)-97] = !even[int(c)-97];
        } else{
            break;
        }
    }
    for(i=0; i<25; i++){
        if(!even[i]){
            result = !result;
            odd = true;
        }
    }
    cout << names[result && odd];
    return 0;
}


#include <iostream>

using namespace std;

int main(){
    string names[2] = {"First", "Second"};
    char c;
    bool even[25], result = true; // 97 - 122
    int i;
    for(i=0; i<25; i++){
        even[i] = true;
    }
    while(cin >> c){
        i = int(c)-97;
        cout << i << " ";
        if(i >= 0 && i < 25){
            even[int(c)-97] = !even[int(c)-97];
        }/* else{
            break;
        }*/
    }
    for(i=0; i<25; i++){
        if(!even[i]){
            result = !result;
        }
    }
    cout << names[result];
    //cin >> i;
    return 0;
}


#include <iostream>

using namespace std;

int main(){
    string names[2] = {"First", "Second"};
    char c;
    bool even[26], result = true, odd = false; // 97 - 122
    int i;
    for(i=0; i<26; i++){
        even[i] = true;
    }
    while(cin >> c){
        i = int(c)-97;
        //cout << i << " ";
        if(i >= 0 && i < 26){
            even[int(c)-97] = !even[int(c)-97];
        } else{
            break;
        }
    }
    for(i=0; i<26; i++){
        if(!even[i]){
            result = !result;
            odd = true;
        }
    }
    cout << names[result && odd];
    return 0;
}


#include <iostream>

using namespace std;

int main(){
    string names[2] = {"First", "Second"};
    char c;
    bool even[26], result = true, odd = false; // 97 - 122
    int i;
    for(i=0; i<26; i++){
        even[i] = true;
    }
    while(cin >> c){
        i = int(c)-97;
        //cout << i << " ";
        if(i >= 0 && i < 26){
            even[int(c)-97] = !even[int(c)-97];
        } else{
            break;
        }
    }
    for(i=0; i<26; i++){
        cout << even[i] << endl;
        if(!even[i]){
            result = !result;
            odd = true;
        }
    }
    cout << names[result && odd];
    cin >> i;
    return 0;
}


#include <iostream>

using namespace std;

int main(){
    string names[2] = {"First", "Second"};
    char c;
    bool even[25], result = true; // 97 - 122
    int i;
    for(i=0; i<25; i++){
        even[i] = true;
    }
    while(cin >> c){
        i = int(c)-97;
        //cout << i << " ";
        if(i >= 0 && i < 25){
            even[int(c)-97] = !even[int(c)-97];
        }/* else{
            break;
        }*/
    }
    for(i=0; i<25; i++){
        if(!even[i]){
            result = !result;
        }
    }
    cout << names[result];
    //cin >> i;
    return 0;
}


#include <iostream>

using namespace std;

int main(){
    string names[2] = {"First", "Second"};
    char c;
    bool even[26], result = true, odd = false; // 97 - 122
    int i;
    for(i=0; i<26; i++){
        even[i] = true;
    }
    while(cin >> c){
        i = int(c)-97;
        if(i >= 0 && i < 26){
            even[int(c)-97] = !even[int(c)-97];
        }
    }
    for(i=0; i<26; i++){
        if(!even[i]){
            result = !result;
            odd = true;
        }
    }
    cout << names[result && odd];
    return 0;
}


#include <iostream>

using namespace std;

int main(){
    string names[2] = {"First", "Second"};
    char c;
    bool even[26], result = true, odd = false; // 97 - 122
    int i;
    for(i=0; i<26; i++){
        even[i] = true;
    }
    while(cin >> c){
        i = int(c)-97;
        //cout << i << " ";
        if(i >= 0 && i < 26){
            even[int(c)-97] = !even[int(c)-97];
        } else{
            break;
        }
    }
    for(i=0; i<25; i++){
        if(!even[i]){
            result = !result;
            odd = true;
        }
    }
    cout << names[result && odd];
    return 0;
}


#include<bits/stdc++.h>
# define ll long long
# define fo(i,n)for(int i=0;i<n;i++)
# define fo1(i,n)for(int i=1;i<=n;i++)
# define pb push_back
# define endl "\n"
# define limit 1000000
# define mod 1000000007
using namespace std;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    string s,x="";
    cin>>s;
    int odd=0;
    int l=s.length();
    int hash[27]={0};
    for(int i=0;i<l;i++)
    hash[(s[i]-'a')]++;
    for(int i=0;i<27;i++)
    {
        if(hash[i]%2!=0)
         odd++;
    }
    if(odd<=1)
    {
        cout<<"First";
        return 0;
    }
    if(odd%2==0)
    {
      cout<<"Second";
      return 0;
    }
    cout<<"First";
    return 0;

}


#include<bits/stdc++.h>
# define ll long long
# define fo(i,n)for(int i=0;i<n;i++)
# define fo1(i,n)for(int i=1;i<=n;i++)
# define pb push_back
# define endl "\n"
# define limit 1000000
# define mod 1000000007
using namespace std;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    string s,x="";
    cin>>s;
    int hash[27]={0};
    int l=s.length();
    for(int i=l-1;i>=0;i--)
    {
        s.erase(s.begin()+i);
        l=s.length();
       for(int k=l-1;k>=0;k--)
           x+=s[k];
        if(x==s)
        {
           cout<<"Second";
           return 0;
        }
         x="";
         i--;
        s.erase(s.begin()+i);
        l=s.length();
        for(int j=l-1;j>=0;j--)
           x+=s[j];
        if(x==s)
        {
           cout<<"First";
           return 0;
        }
          x="";
    }
}


#include<bits/stdc++.h>
# define ll long long
# define fo(i,n)for(int i=0;i<n;i++)
# define fo1(i,n)for(int i=1;i<=n;i++)
# define pb push_back
# define endl "\n"
# define limit 1000000
# define mod 1000000007
using namespace std;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    string s,x="";
    cin>>s;
    int hash[27]={0};
    int l=s.length();
    for(int i=l-1;i>=0;i--)
      x+=s[i];
    if(x==s)
    {
        cout<<"First";
        return 0;
    }
    x="";
    for(int i=l-1;i>=0;i--)
    {
        s.erase(s.begin()+i);
        l=s.length();
       for(int k=l-1;k>=0;k--)
           x+=s[k];
        if(x==s)
        {
           cout<<"Second";
           return 0;
        }
         x="";
         i--;
        s.erase(s.begin()+i);
        l=s.length();
        for(int j=l-1;j>=0;j--)
           x+=s[j];
        if(x==s)
        {
           cout<<"First";
           return 0;
        }
          x="";
    }
}


#include<bits/stdc++.h>
# define ll long long
# define fo(i,n)for(int i=0;i<n;i++)
# define fo1(i,n)for(int i=1;i<=n;i++)
# define pb push_back
# define endl "\n"
# define limit 1000000
# define mod 1000000007
using namespace std;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    string s,x="";
    cin>>s;
    int odd=0;
    int l=s.length();
    int hash[27]={0};
    for(int i=0;i<l;i++)
    hash[(s[i]-'a')]++;
    for(int i=0;i<27;i++)
    {
        if(hash[i]%2!=0)
         odd++;
    }
    if(odd<=1)
    {
        cout<<"First";
        return 0;
    }
    if(odd%2==0)
    {
      cout<<"Second";
    }
    cout<<"First";
    return 0;

}


#include <iostream>
#include <vector>
#include <list>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <complex>
# define ll long long
# define fo(i,n)for(int i=0;i<n;i++)
# define fo1(i,n)for(int i=1;i<=n;i++)
# define pb push_back
# define endl "\n"
# define limit 1000000
# define mod 1000000007
using namespace std;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    string s,x="";
    cin>>s;
    int odd=0;
    int l=s.length();
    int hash[27]={0};
    for(int i=0;i<l;i++)
    hash[(s[i]-'a')]++;
    for(int i=0;i<27;i++)
    {
        if(hash[i]%2!=0)
         odd++;
    }
    if(odd<=1)
    {
        cout<<"First";
        return 0;
    }
    if(odd%2==0)
    {
      cout<<"Second";
      return 0;
    }
    cout<<"First";
    return 0;

}


#include <stdio.h>
#include <math.h>
#include <string.h>
#include <iostream>
#include <vector>
#include <list>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <complex>
using namespace std;
typedef long long lld;

char ch[10001];

int amt[30];
int tot;
int count_odd = 0;

int main()
{
    scanf("%s",&ch);
    int L = strlen(ch);
    for (int i=0;i<L;i++)
    {
        amt[ch[i]-'a']++;
    }
    for (int i=0;i<26;i++)
    {
        if (amt[i] % 2 == 1) count_odd++;
    }
    if (count_odd == 0)
    {
        printf("First\n");
        return 0;
    }
    if (count_odd == 1)
    {
        printf("First\n");
        return 0;
    }
    if (count_odd % 2 == 0)
    {
        printf("Second\n");
        return 0;
    }
    printf("First\n");
    return 0;
}


#include<bits/stdc++.h>
using namespace std ;

int main(){

    string s;
    int l,r,nb,test=0;
    nb=1;
    cin>>s;
    l=0;

    while(!test){
            l=0;
                r=s.size()-1;

        while(l<r){
            if(s[l]!=s[r]){
                s.erase(l);
                break;
            }
            l++;
            r--;

        }
        if(l==r)
            test=1;
        else if(nb==1)
            nb=2;
        else
            nb=1;
    }
    if(nb==1)
        cout<<"First"<<endl;
    else{
        cout<<"Second"<<endl;
    }

}


#include<bits/stdc++.h>
using namespace std ;

int main(){

    string s;
    int l,r,nb,test=0;
    nb=1;
    cin>>s;
    l=0;

    while(!test){
            l=0;
            r=s.size()-1;

        while(l<r){
            if(s[l]!=s[r]){

                s.erase(l,1);
                break;
            }
            l++;
            r--;

        }
        if(l>=r){
            test=1;
        }
        else if(nb==1)
            nb=2;
        else
            nb=1;
    }
    if(nb==1)
        cout<<"First"<<endl;
    else{
        cout<<"Second"<<endl;
    }

}


#include <bits/stdc++.h>
using namespace std;
bool verif(string s){
    int l,r;
    l=0;
    r=s.size()-1;
    while(l<r){

        if(s[l]!=s[r])
            return false;
        r--;
        l++;
    }
    return true;

}

int main(){

    int test=0;
    map<char,long> mp;
    string s;
    set<long> se;
    cin>>s;
    for(int i=0;i<s.size();i++){
        mp[s[i]]++;

    }
    long mi=1e9;
    long long so=0;
    for(auto it=mp.begin();it!=mp.end();it++){
        if(it->second%2!=0){
            mi=min(it->second,mi);
            so+=it->second;
        }
        se.insert(it->second);

    }
    int test1=0;
    if(se.size()<3){
        for(auto it=se.begin();it!=se.end();it++){
            if(*it%2==0)
                test=1;
            if(test1==0&&*it%2!=0)
                test1=1;
            if(test1==1&&*it%2!=0){
                test=0;
                break;
            }

        }
    }
    if(test){
        cout<<"First"<<endl;

    }
    else{
        if((so-mi+1)%2==0)
            cout<<"Second"<<endl;
        else
            cout<<"First"<<endl;
    }

}


#include<bits/stdc++.h>
using namespace std ;

int main(){

    string s;
    int l,r,nb,test=0;
    nb=1;
    cin>>s;
    l=0;

    while(!test){
            l=0;
            r=s.size()-1;

        while(l<r){
            if(s[l]!=s[r]){
                    if(l<r-1&&s[l]==s[r-1])
                        s.erase(r,1);
                    else
                        s.erase(l,1);
                break;
            }
            l++;
            r--;

        }
        if(l>=r){
            test=1;
        }
        else if(nb==1)
            nb=2;
        else
            nb=1;
    }
    if(nb==1)
        cout<<"First"<<endl;
    else{
        cout<<"Second"<<endl;
    }

}


#include<bits/stdc++.h>
using namespace std ;

int main(){

    string s;
    int l,r,nb,test=0;
    nb=1;
    cin>>s;
    l=0;

    while(!test){
            l=0;
            r=s.size()-1;

        while(l<r){
            if(s[l]!=s[r]){
                    if(l<r&&s[l]==s[r+1])
                        s.erase(r,1);
                    else
                        s.erase(l,1);
                break;
            }
            l++;
            r--;

        }
        if(l>=r){
            test=1;
        }
        else if(nb==1)
            nb=2;
        else
            nb=1;
    }
    if(nb==1)
        cout<<"First"<<endl;
    else{
        cout<<"Second"<<endl;
    }

}


#include<bits/stdc++.h>
using namespace std ;

int main(){

    string s;
    int l,r,nb,test=0;
    nb=1;
    cin>>s;
    l=0;

    while(!test){
            l=0;
                r=s.size()-1;

        while(l<r){
            if(s[l]!=s[r]){
                s.erase(l);
                break;
            }
            l++;
            r--;

        }
        if(l>=r)
            test=1;
        else if(nb==1)
            nb=2;
        else
            nb=1;
    }
    if(nb==1)
        cout<<"First"<<endl;
    else{
        cout<<"Second"<<endl;
    }

}