stablegradients/pie-gem5-pairs huggingface dataset:
// Slower C++ solution:
#include <bits/stdc++.h>

using namespace std;



char st[100010];



int main() {

	scanf("%s", st);

	int l = strlen(st);

	if (st[0] == st[l-1]) {

		if (l % 2 == 1) {

			puts("Second");

		} else {

			puts("First");

		}

	} else {

		if (l % 2 == 1) {

			puts("First");

		} else {

			puts("Second");

		}

	}

}

// Faster C++ solution for the same problem (measured speedup: 5.279763646131971x):
#include<cstdio>

#include<cstring>

using namespace std;

int n; char s[100010];

int main()

{

	scanf("%s",s); n=strlen(s);

	if(s[0]==s[n-1]) --n;

	puts(n%2 ? "First" : "Second");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;



char s[100010];



int main(){

    scanf("%s",s);

    int len = strlen(s);

    if(s[0] == s[len-1]) len--;

    if(len & 1) printf("First");

    else printf("Second");



    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.280669799757627x):
#include<cstdio>

#include<cstring>

using namespace std;

int n; char s[100010];

int main()

{

	scanf("%s",s); n=strlen(s);

	if(s[0]==s[n-1]) --n;

	puts(n%2 ? "First" : "Second");

	return 0;

}
// Slower C++ solution:
#include<iostream>

#include<cstring>

using namespace std;

int main()

{

   char m[100010];

   int a,b;

   while (cin>>m)

    {

       a=strlen(m);

       if (m[0]==m[a-1])

	   b=a-3;

       else 

	   b=a-2;

       if (b%2==1)

	   cout<<"First"<<endl;

       else 

	   cout<<"Second"<<endl;

    }

   return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.335156609218543x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
#include<iostream>

#include<algorithm> 

#include<string.h>

using namespace std;

int main()

{

	int b;

	string s;

	while(cin>>s)

	{

	int a=s.length();

	if(s[0]==s[a-1])

	b=a-3;

	else

	b=a-2;

	if(b%2)

	cout<<"First"<<endl;

	else

	cout<<"Second"<<endl;

	}

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.378320305674195x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:


#include<iostream>

#include<string.h>

using namespace std;

int main()

{

	string s;

	int t;

	cin>>s;

	t=s.size();

	if(s[0]==s[t-1])

	{

	if(t%2==0)

	cout<<"First"<<endl;

	if(t%2!=0)

	cout<<"Second"<<endl;

	}

	else 

	{

		if(t%2==0) 

		cout<<"Second"<<endl;

		else

		cout<<"First"<<endl;

		}

		return 0;

	}

// Faster C++ solution for the same problem (measured speedup: 5.332472460923145x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
#include <iostream>

#include <cstring>

using namespace std;

int main(){

  string s;

  cin>>s;

  if(s[0]==s[s.length()-1]){

    if(s.length()%2==0)

      cout<<"First"<<endl;

    else cout<<"Second"<<endl;

  }

  else {

    if(s.length()%2==0)

      cout<<"Second"<<endl;

    else cout<<"First"<<endl;

  }

  return 0;

}


// Faster C++ solution for the same problem (measured speedup: 5.332324154692661x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
#include<cstring> 

#include<iostream> 

using namespace std;

int main()

{

	int flag=0,count=0;

	char a[100005];

	cin>>a;

	(a[0]==a[strlen(a)-1])?(flag=1):0;

	count+=flag+strlen(a);

	cout<<((count&1)?"First":"Second");

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.320148854221645x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
#include <iostream>

#include <bits/stdc++.h>



using namespace std;



char c[100005];

int main()

{

    cin>>c;

    int len=strlen(c);

    if(c[0]==c[len-1])

        len++;

    if(len%2==0)

        cout<<"Second"<<endl;

    else

    cout << "First" << endl;

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 5.335562445364748x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
#include <algorithm>

#include <bitset>

#include <cstdio>

#include <cstring>

#include <iostream>

#include <map>

#include <queue>

#include <set>

#include <vector>

#define MP make_pair

#define ls (o << 1)

#define rs (o << 1 | 1)

#define mid ((L + R) >> 1)

#define eps (1e-5)

using namespace std;

typedef long long LL;

const LL mod = 1e9 + 7;

int n, m;

typedef pair<int, int> PII;

char s[100050];

int main() {

    scanf("%s", s);

    auto len = strlen(s);

    if (s[0] != s[len - 1] && len % 2 == 0) {

        puts("Second");

        return 0;

    }

    if (s[0] != s[len - 1] && len % 2 == 1) {

        puts("First");

        return 0;

    }

    printf("%s\n", len & 1 ? "Second" : "First");

    return 0;

}

//苏子曰：“客亦知夫（fú）水与月乎？逝者如斯[36]，而未尝往也；盈虚者如彼[37]，而卒[38]莫消长(zhǎng)也。盖将自其变者而观之，则天地曾（zēng）不能以一瞬；自其不变者而观之，则物与我皆无尽也，而又何羡乎！且夫（fú）天地之间，物各有主，苟（gǒu）非吾之所有，虽一毫而莫取。惟江上之清风，与山间之明月，耳得之而为声，目遇之而成色，取之无禁，用之不竭，是造物者之无尽藏[39]（zàng）也，而吾与子之所共适[40]。”

//客喜而笑，洗盏(zhǎn)更（gēng）酌[41]（zhuó）。肴（yáo）核既尽[42]，杯盘狼籍。相与枕藉[43]（jiè）乎舟中，不知东方之既白[44]

// Faster C++ solution for the same problem (measured speedup: 5.27021291473416x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

int main()

{

    char s[100010];

    int ans,len;

    scanf("%s",s);len=strlen(s);

    if (s[0]==s[len-1])

    {

        if (len & 1) ans=2;

        else ans=1;

    }

    else

    {

        if (len & 1) ans=1;

        else ans=2;

    }

    if (ans==1) cout<<"First"<<endl;

    else cout<<"Second"<<endl;

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.343158029270507x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
#include <iostream>

#include <cstring>

#include <cstdio>

#include <string>

using namespace std;

string s;

int main(){

		//freopen("main.in","r",stdin);

		cin >> s;

		int len;

		if(s[0] == s[s.length()-1]) {

				len = s.length() - 3;

		}

		else{

				len = s.length() - 2;

		}

		if(len % 2){

			   	cout << "First" << endl;



		}else {

				cout << "Second" << endl;

		}

		return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.334315419736596x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

char s[100010];

int main(){

	scanf("%s",s);

	int len=strlen(s);

	int ans=(s[0]==s[len-1])^(len%2);

	if(!ans)cout<<"Second"<<endl;

	else cout<<"First"<<endl;

}




// Faster C++ solution for the same problem (measured speedup: 5.294375032070592x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
#include <bits/stdc++.h>

using namespace std;

string s;

int main(){

	cin >> s;

	if(s[0] == s[s.length() - 1]){

		if(s.length() % 2)

			cout << "Second" << endl;

		else

			cout << "First" << endl;

	}else{

		if(s.length() % 2)

			cout << "First" << endl;

		else

			cout << "Second" << endl;

	}

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.335648648811394x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
#include <bits/stdc++.h>

using namespace std;



char st[100010];



int main() {

	scanf("%s", st);

	int l = strlen(st);

	if (st[0] == st[l-1]) {

		if (l % 2 == 1) {

			puts("Second");

		} else {

			puts("First");

		}

	} else {

		if (l % 2 == 1) {

			puts("First");

		} else {

			puts("Second");

		}

	}

}

// Faster C++ solution for the same problem (measured speedup: 5.270142327018825x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;



char s[100010];



int main(){

    scanf("%s",s);

    int len = strlen(s);

    if(s[0] == s[len-1]) len--;

    if(len & 1) printf("First");

    else printf("Second");



    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.27104682935973x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

string s;

int main() {

  cin >> s;

  int l = s.size();

  if(s[0] == s[l-1]) {

    if((l - 2) % 2)printf("Second\n");

    else printf("First\n");

  }

  else {

    if((l - 2) % 2) printf("First\n");

    else printf("Second\n");

  }

}


// Faster C++ solution for the same problem (measured speedup: 5.312331163908738x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
//#include <bits/stdc++.h>

#include <stdio.h>

#include <iostream>

#include <string.h>

#include <math.h>

#include <stdlib.h>

#include <limits.h>

#include <algorithm>

#include <queue>

#include <vector>

#include <set>

#include <map>

#include <stack>

#include <bitset>

#include <string>

#include <time.h>

using namespace std;

long double esp=1e-11;

//#pragma comment(linker, "/STACK:1024000000,1024000000")

#define fi first

#define se second

#define all(a) (a).begin(),(a).end()

#define cle(a) while(!a.empty())a.pop()

#define mem(p,c) memset(p,c,sizeof(p))

#define mp(A, B) make_pair(A, B)

#define pb push_back

#define lson l , m , rt << 1

#define rson m + 1 , r , rt << 1 | 1

typedef long long int LL;

const long double PI = acos((long double)-1);

const LL INF=0x3f3f3f3f3f3f3f3fll;

const int MOD =1000000007ll;

const int maxn=210100;

char s[maxn];

int main()

{

    //freopen("in9.txt", "r", stdin);

    //freopen("in9.txt", "r", stdin);

    //freopen("out9.txt", "w", stdout);

    //::iterator iter;                  %I64d

    //for(int x=1;x<=n;x++)

    //for(int y=1;y<=n;y++)

    //scanf("%d",&a);

    //printf("%d\n",ans);

    scanf("%s",s);

    int n=strlen(s);

    int f=1;

    for(int x=0;x<n-2;x++)

        if(s[x]!=s[x+2])

        {

            f=0;

            break;

        }

    if(f==1)

    {

        printf("Second\n");

        return 0;

    }

    if(s[0]==s[n-1])n--;

    if(n&1)printf("First\n");

    else printf("Second\n");

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 5.271769690781726x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

string s;

int l;

int main() {

	cin>>s;

	l = s.length();

	if (s[0] == s[l - 1]) {

		if (l % 2 == 0) cout<<"First"; else cout<<"Second";

	} else {

		if (l % 2 == 0) cout<<"Second"; else cout<<"First";

	}

}

// Faster C++ solution for the same problem (measured speedup: 5.322994648385159x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;



const int maxn=1e5+7;



char s[maxn];



int main()

{

	int i,j;

	scanf("%s",s);

	int n=strlen(s);

	if(n%2==0)

	{

		if(s[0]==s[n-1])

		  printf("First");

		else printf("Second");

	}

	else

	{

		if(s[0]==s[n-1])

		  printf("Second");

		else printf("First");

	}

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.271676471780515x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
#include <bits/stdc++.h>

using namespace std;

const int maxn=  1e5+10;

char s[maxn];

int main (void) {

    scanf ("%s", s);

    int len = strlen (s);

    if (s[0] == s[len-1]) len--;

    if (len % 2 == 1) printf ("First\n");

    else printf ("Second\n");

    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.270537848715199x):
#include <cstdio>

#include <cstring>

#include <algorithm>

#include <vector>

#define ll long long

using namespace std;

const int maxn = 200010;



char s[maxn];

int n, flag;



int main () {

	scanf ("%s", s);

	n = strlen(s);

	if (s[0] == s[n-1]) {

        if (n&1) flag = true;

	} else {

		if(n&1);

		else flag = true;

	}



	if (flag) puts ("Second");

	else puts ("First");

	return 0;

}
// Slower C++ solution:
#include <iostream>

#include <cstdio>

#include <algorithm>

#include <vector>

#include <stack>

#include <queue>

#include <map>

#include <set>

#include <string>

#include <cstring>

#define ll long long

#define rep(x,n) for(ll (x)=0;(x)<n;(x)++)

#define rep1(x,n) for(ll (x)=1;(x)<=n;(x)++)

using namespace std;



char s[300005],book[300005];



int main()

{

    #ifdef LOCAL

        freopen("B_data","r",stdin);

    #endif

    while(cin>>s)

    {

        ll len=strlen(s),cnt=0,l=0,r=2;

        memset(book,0,sizeof(book));

        rep(i,len)

        {

            if(!i || i==(len-1) || book[i]) continue;

            while(l && book[l]) l--;

            while(r<=i || (r<len && book[r])) r++;

            if(s[l]!=s[r])

            {

                cnt++,book[i]=1;

                //cout<<s[i];

                i-=2;

            }

        }

        //cout<<endl;

        if(cnt%2) cout<<"First"<<endl;

        else cout<<"Second"<<endl;

    }

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 1.3170107548784424x):
#include <iostream>

#include <algorithm>

#include <cstdio>

#include <string.h>

#include <cmath>

#include <cstdlib>

#include <map>

using namespace std;



const int INF = 1 << 30;

const int maxn = 100000 + 10;

char arr[maxn];

int book[maxn];



int main()

{

    //freopen("in", "r", stdin);

    scanf("%s", arr);

    int len = strlen(arr), cnt = 0;

    for (int i = 1; i < len - 1; i++)

        if (arr[i] == arr[i - 1]);

            cnt++;

    if (arr[len - 1] == arr[0])

        len -= 3;

    else

        len -= 2;



    //printf("%d\n", cnt);

    if (len % 2 == 0)

        printf("Second\n");

    else

        printf("First\n");



    return 0;

}
// Slower C++ solution:
#include <iostream>

#include <cstdio>

#include <algorithm>

#include <vector>

#include <stack>

#include <queue>

#include <map>

#include <set>

#include <string>

#include <cstring>

#define ll long long

#define rep(x,n) for(ll (x)=0;(x)<n;(x)++)

#define rep1(x,n) for(ll (x)=1;(x)<=n;(x)++)

using namespace std;



char s[300005],book[300005];



int main()

{

    #ifdef LOCAL

        freopen("B_data","r",stdin);

    #endif

    while(cin>>s)

    {

        ll len=strlen(s),cnt=0,l=0,r=2;

        memset(book,0,sizeof(book));

        rep(i,len)

        {

            if(!i || i==(len-1) || book[i]) continue;

            while(l && book[l]) l--;

            while(r<=i || (r<len && book[r])) r++;

            if(s[l]!=s[r])

            {

                cnt++,book[i]=1;

                //cout<<s[i];

                i-=2;

            }

        }

        //cout<<endl;

        if(cnt%2) cout<<"First"<<endl;

        else cout<<"Second"<<endl;

    }

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 1.3163044713381744x):
#include <iostream>

#include <algorithm>

#include <string>

#include <cstdio>

#include <cstdlib>

#include <cstring>

#include <cmath>

#include <vector>



using namespace std;

typedef long long ll;

const ll mol=1000000007;

const int maxn=1000000;

const double PI=acos(-1.0);

char ch[maxn];

int main()

{

#ifdef LOCAL

freopen("3.h","r",stdin);

#endif

    scanf("%s",ch);

    int len=strlen(ch);int num=0;

    int dp1=0,dp2=0;

    for(int i=1;i<len-1;i++)

    if(ch[i+1]!=ch[i-1])num++;

    /*for(int i=2;i<len-2;i++)

    {

        if(ch[i+1]!=ch[i-1])

        {

            if(ch[i-2]==ch[i]&&ch[i+2]==ch[i])dp1=1;

            else if(ch[i-2]==ch[i+1]&&ch[i+2]==ch[i-1])dp1=1;

            else if((ch[i-2]==ch[i]||ch[i+2]==ch[i])&&(ch[i-2]==ch[i+1]||ch[i+2]==ch[i-1]))dp2=1;

            else dp1=1;

        }

    }

    if((num%2)==0&&dp2==0)printf("Second");

    else printf("First");*/

    if(num==0)printf("Second");

    //else if(num==1)printf("First");

    else if(ch[0]==ch[len-1])

    {

        if(!(len%2))printf("First");

        else printf("Second");

    }

    else

    {

        if(len%2)printf("First");

        else printf("Second");

    }

    return 0;

}
// Slower C++ solution:
#include <iostream>

#include <cstdio>

#include <algorithm>

#include <vector>

#include <stack>

#include <queue>

#include <map>

#include <set>

#include <string>

#include <cstring>

#define ll long long

#define rep(x,n) for(ll (x)=0;(x)<n;(x)++)

#define rep1(x,n) for(ll (x)=1;(x)<=n;(x)++)

using namespace std;



char s[300005],book[300005];



int main()

{

    #ifdef LOCAL

        freopen("B_data","r",stdin);

    #endif

    while(cin>>s)

    {

        ll len=strlen(s),cnt=0,l=0,r=2;

        memset(book,0,sizeof(book));

        rep(i,len)

        {

            if(!i || i==(len-1) || book[i]) continue;

            while(l && book[l]) l--;

            while(r<=i || (r<len && book[r])) r++;

            if(s[l]!=s[r])

            {

                cnt++,book[i]=1;

                //cout<<s[i];

                i-=2;

            }

        }

        //cout<<endl;

        if(cnt%2) cout<<"First"<<endl;

        else cout<<"Second"<<endl;

    }

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 1.2958148143319237x):
#define bi

#include <iostream>

#include<cstdio>

#include<cstdlib>

#include<cmath>

#include<cstring>

#include<algorithm>

#include<set>

#include<map>

#include<vector>

#include<queue>

#include<string>

#define MP make_pair

using namespace std;

typedef long long ll;

const ll maxn=1e5+10;

const ll mod=1e9+7;

char ch[maxn];



int main()

{

#ifdef bibi

    freopen("in.txt","r",stdin);

#endif

    ios::sync_with_stdio(false);

    cin.tie(0);

    cin>>ch;

    ll len=strlen(ch);

    if(ch[0]==ch[len-1])

    {

        if(len%2==0)

            cout<<"First";

        else

            cout<<"Second";

    }

    else

    {

        if(len%2==0)

            cout<<"Second";

        else

            cout<<"First";

    }

    return 0;

}