stablegradients/pie-gem5-pairs huggingface dataset:
// Slower C++ solution:
#include <cstdio>

#include <cstdlib>

#include <cstring>

#include <cmath>

#include <algorithm>

#include <assert.h>

#define IOS ios::sync_with_stdio(false)

using namespace std;

#define inf (0x3f3f3f3f)

typedef long long int LL;





#include <iostream>

#include <sstream>

#include <vector>

#include <set>

#include <map>

#include <queue>

#include <string>

#include <bitset>

#include <list>

list<char>theList;

const int maxn = 1e5 + 20;

char str[maxn];

void work() {

    scanf("%s", str + 1);

    int lenstr = strlen(str + 1);

    for (int i = 1; i <= lenstr; ++i) {

        theList.push_back(str[i]);

    }

//    for (list<char> :: iterator it = theList.begin(); it != theList.end(); ++it) {

//        cout << *it;

//    }

    int ans = 0;

    while (theList.size() > 2) {

        if (theList.size() == 3 && theList.front() == theList.back()) break;

        list<char> :: iterator itBegin = theList.begin();

        itBegin++;

        list<char> :: iterator itEnd = theList.end();

        itEnd--;

        list<char> :: iterator itBeginPre = theList.begin();

        list<char> :: iterator itBeginNext = itBegin; itBeginNext++;

        bool flag = false;

        while (itBegin != itEnd) {

            if (*itBeginPre == *itBeginNext) {

                itBeginPre++;

                itBegin++;

                itBeginNext++;

            } else {

                theList.erase(itBegin);

                flag = true;

                break;

            }

        }

        if (!flag) break;

        ans++;

    }

//    cout << ans << endl;

    if (ans & 1) {

        cout << "First" << endl;

    } else cout << "Second" << endl;

}



int main() {

#ifdef local

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

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

#endif

    work();

    return 0;

}


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

#include <cstring>

#include <algorithm>



using namespace std;



char st[104014];



int main(){

  while(~scanf("%s", st)){

    int len = strlen(st);

    if(st[0] != st[len-1]){

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

      else printf("Second\n");

    }

    else {

      if(len & 1) printf("Second\n");

      else printf("First\n");

    }

  }

  return 0;

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

#include <cstdlib>

#include <cstring>

#include <cmath>

#include <algorithm>

#include <assert.h>

#define IOS ios::sync_with_stdio(false)

using namespace std;

#define inf (0x3f3f3f3f)

typedef long long int LL;





#include <iostream>

#include <sstream>

#include <vector>

#include <set>

#include <map>

#include <queue>

#include <string>

#include <bitset>

#include <list>

list<char>theList;

const int maxn = 1e5 + 20;

char str[maxn];

void work() {

    scanf("%s", str + 1);

    int lenstr = strlen(str + 1);

    lenstr -= 2;

    if (str[1] == str[strlen(str + 1)]) lenstr--;

    if (lenstr & 1) {

        cout << "First" << endl;

    } else cout << "Second" << endl;

}



int main() {

#ifdef local

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

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

#endif

    work();

    return 0;

}


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

#include <cstring>

#include <algorithm>



using namespace std;



char st[104014];



int main(){

  while(~scanf("%s", st)){

    int len = strlen(st);

    if(st[0] != st[len-1]){

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

      else printf("Second\n");

    }

    else {

      if(len & 1) printf("Second\n");

      else printf("First\n");

    }

  }

  return 0;

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

#include <iostream>

#include <cstring>

#include <algorithm>

using namespace std;

const int maxn=1e5+10;

char str[maxn];

int main()

{

   cin>>str;

   int len=strlen(str);

   if (str[0]==str[len-1]){

       if (len&1){

         cout<<"Second\n";



       }

       else cout<<"First\n";



   }

   else {

      if (len&1){

         cout<<"First\n";

      }

      else cout<<"Second\n";

   }



   return 0;

}


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

#include <cstring>

#include <algorithm>



using namespace std;



char st[104014];



int main(){

  while(~scanf("%s", st)){

    int len = strlen(st);

    if(st[0] != st[len-1]){

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

      else printf("Second\n");

    }

    else {

      if(len & 1) printf("Second\n");

      else printf("First\n");

    }

  }

  return 0;

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

#include <algorithm>

#include <cstdio>

#include <cstdlib>

#include <cstring>

#include <cmath>

#include <stack>

#include <queue>

#include <vector>

#include <map>

#include <set>

using namespace std;

#define ll long long

char s[300005];



int main()

{

    scanf("%s",s);

    int l=strlen(s);

    int x=l-2;

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

    {

        if(x%2==0) printf("First");

        else printf("Second");

    }

    else

    {

        if(x%2==1) printf("First");

        else printf("Second");

    }

    return 0;

}


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

#include <cstring>

#include <algorithm>



using namespace std;



char st[104014];



int main(){

  while(~scanf("%s", st)){

    int len = strlen(st);

    if(st[0] != st[len-1]){

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

      else printf("Second\n");

    }

    else {

      if(len & 1) printf("Second\n");

      else printf("First\n");

    }

  }

  return 0;

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

#define rep(i,j,k) for(int i=(j);i<(k);i++)

#define mp make_pair

#define sz(a) (int)(a).size()

#define pb push_back

using namespace std;

typedef long long ll;

typedef pair<int,int> pii;

typedef pair<double,double> pdd;

typedef long double ld;

//----head----

char str[100005];

int main()

{

	scanf("%s",str);

	int n=strlen(str);

	int ans=(str[0]==str[n-1]);

	ans^=(n%2);

	puts(ans?"First":"Second");

	return 0;

}


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

#include <cstring>

#include <algorithm>



using namespace std;



char st[104014];



int main(){

  while(~scanf("%s", st)){

    int len = strlen(st);

    if(st[0] != st[len-1]){

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

      else printf("Second\n");

    }

    else {

      if(len & 1) printf("Second\n");

      else printf("First\n");

    }

  }

  return 0;

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

#include <cstdlib>

#include <algorithm>

#include <cstdio>

#include <cmath>

#include <cstring>



using namespace std;



char s[100005];



int main() {

    scanf("%s",s);

    int len=strlen(s);

    if ((len&1)!=(s[0]==s[len-1])) printf("First\n"); else printf("Second\n");



    return 0;

}




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

#include <cstring>

#include <algorithm>



using namespace std;



char st[104014];



int main(){

  while(~scanf("%s", st)){

    int len = strlen(st);

    if(st[0] != st[len-1]){

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

      else printf("Second\n");

    }

    else {

      if(len & 1) printf("Second\n");

      else printf("First\n");

    }

  }

  return 0;

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



using namespace std;

const int maxn=1e5+5;

char a[maxn];

int main()

{

    while(~scanf("%s", a))

    {

        int len=strlen(a);

        if(len&1)

        {

            if(a[0]==a[len-1])printf("Second\n");

            else printf("First\n");

        }

        else

        {

            if(a[0]==a[len-1])printf("First\n");

            else printf("Second\n");

        }

    }

    return 0;

}


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

#include <cstring>

#include <algorithm>



using namespace std;



char st[104014];



int main(){

  while(~scanf("%s", st)){

    int len = strlen(st);

    if(st[0] != st[len-1]){

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

      else printf("Second\n");

    }

    else {

      if(len & 1) 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.3079201223310002x):
#include<iostream>

#include <math.h>

#include <bits/stdc++.h>

#define ll long long

#define inf 0x3f3f3f3f

#define maxn 310000

using namespace std;

int vis[maxn];

char s[111111];

int main()

{

    int i,j,n,jj=0,sum=0,k,flag;

    cin>>s;

    n=strlen(s);

    if(n%2==0)

    {

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

            printf("First\n");

        else printf("Second\n");

    }

    if(n%2!=0)

    {

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

            printf("First\n");

        else printf("Second\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.307153091023685x):
/*QAQ三连：以前的题都补了吗，今天的题都做了吗，不会的算法都会了吗*/

/*金桔退役三连：退役选手不学不会不练*/

#include <bits/stdc++.h>

#define LDQ 1000000007

#define QAQ 0x3f3f3f3f

#define PI 3.14159265358979323846

using namespace std;

int main()

{

    int i;

    char s[100001];

    scanf("%s",s);

    if(strlen(s)%2==0)

    {

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

        {

            printf("First");

        }

        else

        {

            printf("Second");

        }

    }

    else

    {

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

        {

            printf("Second");

        }

        else

        {

            printf("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.2948281209495216x):
#include<bits/stdc++.h>

using namespace std;

int main(){

    string s;

    cin >> s;

    if(s[0] == s[s.size() - 1])

        cout << (s.size() & 1 ? "Second" : "First");

    else

        cout << (s.size() & 1 ? "First" : "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.3148487474648631x):
#include<bits/stdc++.h>

using namespace std;

int s1,s2,a;

char c[100010],c1,c2;

int main(){

	scanf("%s",c+1);

	a=strlen(c+1);

	c1=c[1],c2=c[a];

	if((c1==c2&&a%2==0)||c1!=c2&&a%2!=0) cout<<"First";

	else cout<<"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.3055739906648578x):
#include <iostream>

using namespace std;



int main(){

	string s;

	cin >> s;

	int ans = s.size()-2;

	

	if(s[0]==s[s.size()-1]) ans-=1;

	if(ans&1) cout << "First";	//长度为奇数

	else cout << "Second"; 

}
// 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.334811238772814x):
#include<cstdio>

const int N=100001;

int main() {

    int n=3;

    char s[N];

    scanf("%s",s);

    while(s[n])n++;

    printf((s[0]==s[n-1] ^ n&1)?"First":"Second");

    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.3779721410339985x):
#include<cstdio>

const int N=100001;

int main() {

    int n=3;

    char s[N];

    scanf("%s",s);

    while(s[n])n++;

    printf((s[0]==s[n-1] ^ n&1)?"First":"Second");

    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.332127264235296x):
#include<cstdio>

const int N=100001;

int main() {

    int n=3;

    char s[N];

    scanf("%s",s);

    while(s[n])n++;

    printf((s[0]==s[n-1] ^ n&1)?"First":"Second");

    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.33197896760539x):
#include<cstdio>

const int N=100001;

int main() {

    int n=3;

    char s[N];

    scanf("%s",s);

    while(s[n])n++;

    printf((s[0]==s[n-1] ^ n&1)?"First":"Second");

    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.319804455300356x):
#include<cstdio>

const int N=100001;

int main() {

    int n=3;

    char s[N];

    scanf("%s",s);

    while(s[n])n++;

    printf((s[0]==s[n-1] ^ n&1)?"First":"Second");

    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.335217048647287x):
#include<cstdio>

const int N=100001;

int main() {

    int n=3;

    char s[N];

    scanf("%s",s);

    while(s[n])n++;

    printf((s[0]==s[n-1] ^ n&1)?"First":"Second");

    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.269871748407327x):
#include<cstdio>

const int N=100001;

int main() {

    int n=3;

    char s[N];

    scanf("%s",s);

    while(s[n])n++;

    printf((s[0]==s[n-1] ^ n&1)?"First":"Second");

    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.342812140854228x):
#include<cstdio>

const int N=100001;

int main() {

    int n=3;

    char s[N];

    scanf("%s",s);

    while(s[n])n++;

    printf((s[0]==s[n-1] ^ n&1)?"First":"Second");

    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.333970103745124x):
#include<cstdio>

const int N=100001;

int main() {

    int n=3;

    char s[N];

    scanf("%s",s);

    while(s[n])n++;

    printf((s[0]==s[n-1] ^ n&1)?"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);

	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.294032301613249x):
#include<cstdio>

const int N=100001;

int main() {

    int n=3;

    char s[N];

    scanf("%s",s);

    while(s[n])n++;

    printf((s[0]==s[n-1] ^ n&1)?"First":"Second");

    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.3353032465135675x):
#include<cstdio>

const int N=100001;

int main() {

    int n=3;

    char s[N];

    scanf("%s",s);

    while(s[n])n++;

    printf((s[0]==s[n-1] ^ n&1)?"First":"Second");

    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.269801165261477x):
#include<cstdio>

const int N=100001;

int main() {

    int n=3;

    char s[N];

    scanf("%s",s);

    while(s[n])n++;

    printf((s[0]==s[n-1] ^ n&1)?"First":"Second");

    return 0;

}