#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=4e5+20;
//ÌâÒâ:n<=2e5µÄtree ÇóÈÎÒâÈý¸öÏàÁÚ¶¥µã¶¼²»Í¬É«,ËùÐèÒªµÄÑÕÉ«ÖÖÊýºÍÉÏÉ«·½°¸
int n,c[N],ans;
pair<int,int> p[N];
int num[N];//num[i] µãiÔÚ³öÏÖÔÚ¶àÉÙÌõ±ßÖÐ
vector<int> e[N];
void dfs(int u,int fa,int a,int b)
{
	int k;
	for(k=1;k<=ans;k++)//O(1)
	{
		if(k!=a&&k!=b)
		break;
	}
	c[u]=k;
	for(int i=0;i<e[u].size();i++)
	{
		int v=e[u][i];
		if(v!=fa)
		{
			dfs(v,u,b,k);
		}
	}
}
int main()
{
	while(cin>>n)
	{
		int u,v;
		for(int i=1;i<=n;i++)
			e[i].clear();
		memset(c,-1,sizeof(c));
		memset(num,0,sizeof(num));
		for(int i=1;i<=n-1;i++)
		{
			scanf("%d%d",&p[i].first,&p[i].second);
			u=p[i].first;
			v=p[i].second;

			e[u].push_back(v);
			e[v].push_back(u);

			num[u]++;
			num[v]++;
		}
		ans=0;
		for(int i=1;i<=n;i++)
			ans=max(num[i],ans);
		ans++;
		cout<<ans<<endl;

		dfs(1,-1,-1,-1);
		for(int i=1;i<=n;i++)
		{
			printf("%d",c[i]);
			if(i==n)
			printf("\n");
			else
			printf(" ");
		}

	}
	return 0;
}


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

const int N = 200000;

vector<int> g[N];
int ans = 0;
int color[N];

void dfs(int u, int cl) {
  color[u] = cl;
  for (auto v : g[u]) {
    if (!color[v]) dfs(v, ans++);
  }

  return;
}

int main() {

  int n;
  scanf("%d", &n);

  int u, v;
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &u, &v);
    u--, v--;
    g[u].push_back(v);
    g[v].push_back(u);
  }

  dfs(0, 0);

  cout << ans << '\n';
  for (int i = 0; i < n; i++) {
    printf("%d ", color[i]);
  }

  return 0;
}


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

const int N = 200000;

vector<int> g[N];
int ans = 1;
int color[N];

void dfs(int v, int cl) {
  int cur = 1;
  for (auto u : g[v]) {
    if (color[u]) continue;
    while (cur == cl || cur == color[v])
      cur++;
    ans = max(ans, cur);
    color[u] = cur++;
    dfs(u, color[v]);
  }

  return;
}

int main() {

  int n;
  scanf("%d", &n);

  int u, v;
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &u, &v);
    g[u].push_back(v);
    g[v].push_back(u);
  }
  color[1] = 1;
  dfs(1, 0);

  cout << ans << '\n';
  for (int i = 1; i <= n; i++) {
    printf("%d ", color[i]);
  }

  return 0;
}


#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=5000+5;
int sg[maxn],tot[maxn],pos[maxn];
bool tt[maxn],st[maxn];
void init()
{
    sg[0]=0;
    sg[1]=1;
    sg[2]=1;
    for(int i=3;i<=5000;i++)
    {
        memset(tt,0,sizeof(tt));
        tt[sg[i-2]]=1;
        for(int j=2;j<=(i+1)/2;j++)
        {
            tt[sg[j-2]^sg[i-j-1]]=1;
        }
        for(int k=0;;k++)
        if(tt[k]==0)
         {
            sg[i]=k;
            break;
            }
    }
}
int size=0;
char ch[10000];
int main()
{
    init();
    while(scanf("%s",ch)!=-1)
    {
        int s=strlen(ch);
        memset(st,0,sizeof(st));
        memset(tot,0,sizeof(tot));
        for(int j=1;j<s-1;j++)
        {
            if(ch[j-1]==ch[j+1])
               st[j]=1;
        }
        size=0;
        for(int j=1;j<s-1;j++)
        {
            if(st[j]==1)
            {
                int k=j;
                pos[size]=j;
                while(k<s-1&&st[k]==1)
                {  tot[size]++;
                   k++;
                }
                j=k;
                size++;

            }
        }
        int ans=0;
        for(int i=0;i<size;i++)
         ans^=sg[tot[i]];
        if(ans==0)
        {
            printf("Second\n");
            continue;
        }
        int y=0;
        for(;y<size;y++)
        {
            if(sg[tot[y]]>(ans^sg[tot[y]]))
              break;
        }
        int u,key;
        int aim=ans^sg[tot[y]];
        for(u=1;u<=tot[y];u++)
        {
            int l=u-2;
            if(l<0)
             l=0;
            int r=y-u-1;
            if(r<0)
             r=0;
            int p=sg[l]^sg[r];
            if(p==aim)
            {
                key=pos[y]+u;
                break;
            }

        }
        printf("First\n%d\n",key);
    }
    return 0;
}


#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=5000+5;
int sg[maxn],tot[maxn],pos[maxn];
bool tt[maxn],st[maxn];
void init()
{
	sg[0]=0;
	sg[1]=1;
	sg[2]=1;
	for(int i=3;i<=5000;i++)
	{
		memset(tt,0,sizeof(tt));
		if(sg[i-2]<maxn)
		tt[sg[i-2]]=1;
		for(int j=2;j<=(i+1)/2;j++)
		{
			int r=sg[j-2]^sg[i-j-1];
			if(r<maxn)
			tt[r]=1;
		}
		for(int k=0;;k++)
		if(tt[k]==0)
		 {
			sg[i]=k;
			break;
			}
	}
}
int size=0;
char ch[10000];
int main()
{
	init();

	while(scanf("%s",ch)!=-1)
	{
		int s=strlen(ch);
		memset(st,0,sizeof(st));
		memset(tot,0,sizeof(tot));
		for(int j=1;j<s-1;j++)
		{
			if(ch[j-1]==ch[j+1])
			   st[j]=1;
		}
		size=0;
		for(int j=1;j<s-1;j++)
		{
			if(st[j]==1)
		    {
				int k=j;
				pos[size]=j;
				while(k<s-1&&st[k]==1)
				{  tot[size]++;
				   k++;
				}
				j=k;
				size++;

			}
		}
		int ans=0;
		for(int i=0;i<size;i++)
		 ans^=sg[tot[i]];
		if(ans==0)
		{
			printf("Second\n");
			continue;
		}
	    int u,key;
	    for(u=0;u<size;u++)
	    {
			int p=ans^sg[tot[u]];
			int k;
			for(k=1;k<=tot[u];k++)
			{
				int l,r;
				l=k-2;
				if(l<0)
				 l=0;
				r=tot[u]-k-1;
				if(r<0)
				 r=0;
				 if(sg[l]^sg[r]==p)
				    break;
			}
			if(k<tot[u])
			{
				key=k+pos[u];
				break;
			}
		}
		printf("First\n%d\n",key);
	}
	return 0;
}


#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=5000+5;
int sg[maxn],tot[maxn],pos[maxn];
bool tt[maxn],st[maxn];
void init()
{
	sg[0]=0;
	sg[1]=1;
	sg[2]=1;
	for(int i=3;i<=5000;i++)
	{
		memset(tt,0,sizeof(tt));
		if(sg[i-2]<maxn)
		tt[sg[i-2]]=1;
		for(int j=2;j<=(i+1)/2;j++)
		{
			int r=sg[j-2]^sg[i-j-1];
			if(r<maxn)
			tt[r]=1;
		}
		for(int k=0;;k++)
		if(tt[k]==0)
		 {
			sg[i]=k;
			break;
			}
	}
}
int size=0;
char ch[10000];
int main()
{
	init();
	// 	freopen("I:\\rand.txt","r",stdin);
	//	freopen("I:\\out1.txt","w",stdout);
		int cas(0);
	while(scanf("%s",ch)!=-1)
	{
		printf("%d\n",++cas);
		int s=strlen(ch);
		memset(st,0,sizeof(st));
		memset(tot,0,sizeof(tot));
		for(int j=1;j<s-1;j++)
		{
			if(ch[j-1]==ch[j+1])
			   st[j]=1;
		}
		size=0;
		for(int j=1;j<s-1;j++)
		{
			if(st[j]==1)
		    {
				int k=j;
				pos[size]=j;
				while(k<s-1&&st[k]==1)
				{  tot[size]++;
				   k++;
				}
				j=k;
				size++;

			}
		}
		int ans=0;
		for(int i=0;i<size;i++)
		 ans^=sg[tot[i]];
		if(ans==0)
		{
			printf("Second\n");
			continue;
		}
	    int u,key;
	    for(u=0;u<size;u++)
	    {
			int p=ans^sg[tot[u]];
			int k;
			for(k=1;k<=tot[u];k++)
			{
				int l,r;
				l=k-2;
				if(l<0)
				 l=0;
				r=tot[u]-k-1;
				if(r<0)
				 r=0;
				 if((sg[l]^sg[r])==p)
				    break;
			}
			if(k<=tot[u])
			{
				key=k+pos[u];
				break;
			}
		}
		printf("First\n%d\n",key);
	}
	return 0;
}


#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=5000+5;
int sg[maxn],tot[maxn],pos[maxn];
bool tt[maxn],st[maxn];
void init()
{
    sg[0]=0;
    sg[1]=1;
    sg[2]=1;
    for(int i=3;i<=5000;i++)
    {
        memset(tt,0,sizeof(tt));
        tt[sg[i-2]]=1;
        for(int j=2;j<=(i+1)/2;j++)
        {
            tt[sg[j-2]^sg[i-j-1]]=1;
        }
        for(int k=0;;k++)
        if(tt[k]==0)
         {
            sg[i]=k;
            break;
            }
    }
}
int size=0;
char ch[10000];
int main()
{
    init();
    while(scanf("%s",ch)!=-1)
    {
        int s=strlen(ch);
        memset(st,0,sizeof(st));
        for(int j=1;j<s-1;j++)
        {
            if(ch[j-1]==ch[j+1])
               st[j]=1;
        }
        size=0;
        for(int j=1;j<s-1;j++)
        {
            if(st[j]==1)
            {
                int k=j;
                pos[size]=j;
                while(k<s-1&&st[k]==1)
                {  tot[size]++;
                   k++;
                }
                j=k;
                size++;

            }
        }
        int ans=0;
        for(int i=0;i<size;i++)
         ans^=sg[tot[i]];
        if(ans==0)
        {
            printf("Second\n");
            continue;
        }
        int y=0;
        for(;y<size;y++)
        {
            if(sg[tot[y]]>(ans^sg[tot[y]]))
              break;
        }
        int u,key;
        int aim=ans^sg[tot[y]];
        for(u=1;u<=tot[y];u++)
        {
            int l=u-2;
            if(l<0)
             l=0;
            int r=y-u-1;
            if(r<0)
             r=0;
            int p=sg[l]^sg[r];
            if(p==aim)
            {
                key=pos[y]+u;
            }

        }
        printf("First\n%d\n",key);
    }
    return 0;
}


#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=5000+5;
int sg[maxn],tot[maxn],pos[maxn];
bool tt[maxn],st[maxn];
void init()
{
    sg[0]=0;
    sg[1]=1;
    sg[2]=1;
    for(int i=3;i<=5000;i++)
    {
        memset(tt,0,sizeof(tt));
        if(sg[i-2]<maxn)
        tt[sg[i-2]]=1;
        for(int j=2;j<=(i+1)/2;j++)
        {
            int r=sg[j-2]^sg[i-j-1];
            if(r<maxn)
            tt[r]=1;
        }
        for(int k=0;;k++)
        if(tt[k]==0)
         {
            sg[i]=k;
            break;
            }
    }
}
int size=0;
char ch[10000];
int main()
{
    init();

    while(scanf("%s",ch)!=-1)
    {
        int s=strlen(ch);
        memset(st,0,sizeof(st));
        memset(tot,0,sizeof(tot));
        for(int j=1;j<s-1;j++)
        {
            if(ch[j-1]==ch[j+1])
               st[j]=1;
        }
        size=0;
        for(int j=1;j<s-1;j++)
        {
            if(st[j]==1)
            {
                int k=j;
                pos[size]=j;
                while(k<s-1&&st[k]==1)
                {  tot[size]++;
                   k++;
                }
                j=k;
                size++;

            }
        }
        int ans=0;
        for(int i=0;i<size;i++)
         ans^=sg[tot[i]];
        if(ans==0)
        {
            printf("Second\n");
            continue;
        }
        int u,key;
        for(u=0;u<size;u++)
        {
            int p=ans^sg[tot[u]];
            int k;
            for(k=1;k<=tot[u];k++)
            {
                int l,r;
                l=k-2;
                if(l<0)
                 l=0;
                r=tot[u]-k-1;
                if(r<0)
                 r=0;
                 if(sg[l]^sg[r]==p)
                    break;
            }
            if(k<=tot[u])
            {
                key=k+pos[u];
                break;
            }
        }
        printf("First\n%d\n",key);
    }
    return 0;
}


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=5005;
char S[M];
int sg[M],ca[M];
int n;
int dfs(int x){
	if(x<0)return 0;
	int &re=sg[x];
	if(re!=-1)return re;
	static int mk[M],TIM;TIM++;
	for(int i=1;i<=x;i++)mk[dfs(i-2)^dfs(x-i-1)]=TIM;
	for(int i=0;;i++)if(mk[i]!=TIM)return re=i;
}
int calc(){
	int c=0,ans=0;
	for(int i=1;i<=n;i++)
		if(ca[i])c++;
		else ans^=dfs(c),c=0;
	return ans;
}
int main(){
	scanf("%s",S+1);n=strlen(S+1);
	for(int i=2;i<n;i++)if(S[i-1]==S[i+1])ca[i]=1;
	memset(sg,-1,sizeof(sg));
	sg[0]=0,sg[1]=1;
	if(calc()){
		puts("First");
		for(int i=2,k1,k2,k3;i<n;i++)
			if(ca[i]){
				k1=ca[i-1],k2=ca[i],k3=ca[i+1];
				ca[i-1]=0,ca[i]=0,ca[i+1]=0;
				if(!calc()){
					printf("%d\n",i);
					break;
				}
				ca[i-1]=k1,ca[i]=k2,ca[i+1]=k3;
			}
	}else puts("Second");
	return 0;
}


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=5005;
char S[M];
int sg[M],ca[M];
int n;
int dfs(int x){
	if(x<0)return 0;
	int &re=sg[x];
	if(re!=-1)return re;
	static int mk[M],TIM;
	for(int i=1;i<=x;i++)dfs(i-2),dfs(x-i-1);
	TIM++;
	for(int i=1;i<=x;i++)mk[dfs(i-2)^dfs(x-i-1)]=TIM;
	for(int i=0;i<M;i++)if(mk[i]!=TIM)return re=i;
	return 0;
}
int calc(){
	int c=0,ans=0;
	for(int i=1;i<=n;i++)
		if(ca[i])c++;
		else ans^=dfs(c),c=0;
	return ans;
}
int main(){
	scanf("%s",S+1);n=strlen(S+1);
	for(int i=2;i<n;i++)if(S[i-1]==S[i+1])ca[i]=1;
	memset(sg,-1,sizeof(sg));
	sg[0]=0,sg[1]=1;
	if(calc()){
		puts("First");
		for(int i=1,k1,k2,k3;i<=n;i++)
			if(ca[i]&&i==18){
				k1=ca[i-1],k2=ca[i],k3=ca[i+1];
				ca[i-1]=0,ca[i]=0,ca[i+1]=0;
				if(!calc()){
					printf("%d\n",i);
					break;
				}
				ca[i-1]=k1,ca[i]=k2,ca[i+1]=k3;
			}
	}else puts("Second");
	return 0;
}


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=5005;
char S[M],mark[M];
int sg[M];
int n;
int dfs(int x){
	int &re=sg[x];
	if(re!=-1)return re;
	static int pl[M],psz;psz=0;
	for(int i=1;i<=x;i++)pl[psz++]=sg[i-1]^sg[x-i];
	sort(pl,pl+psz);
	if(pl[0]!=0)return re=0;
	for(int i=1;i<psz;i++)if(pl[i]!=pl[i-1]&&pl[i]!=pl[i-1]+1)return re=pl[i-1]+1;
	return re=pl[psz-1]+1;
}
int calc(){
	int c=0,ans=0;
	for(int i=2;i<n;i++)
		if(S[i-1]==S[i+1]&&!mark[i-1]&&!mark[i+1]&&!mark[i])c++;
		else ans^=dfs(c),c=0;
	ans^=dfs(c);
	return ans;
}
int main(){
	scanf("%s",S+1);n=strlen(S+1);
	memset(sg,-1,sizeof(sg));
	sg[0]=0,sg[1]=1;
	if(calc()){
		puts("First");
		for(int i=2;i<=n;i++)
			if(S[i-1]==S[i+1]){
				mark[i]=1;
				if(!calc()){
					printf("%d\n",i);
					break;
				}
				mark[i]=0;
			}
	}else puts("Second");
	return 0;
}


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=5005;
char S[M];
int sg[M],ca[M];
int n;
int dfs(int x){
	if(x<0)return 0;
	int &re=sg[x];
	if(re!=-1)return re;
	static int mk[M],TIM;
	for(int i=1;i<=x;i++)dfs(i-2),dfs(x-i-1);
	TIM++;
	for(int i=1;i<=x;i++)mk[dfs(i-2)^dfs(x-i-1)]=TIM;
	for(int i=0;i<M;i++)if(mk[i]!=TIM)return re=i;
	return 0;
}
int calc(){
	int c=0,ans=0;
	for(int i=1;i<=n;i++)
		if(ca[i])c++;
		else ans^=dfs(c),c=0;
	return ans;
}
int main(){
	scanf("%s",S+1);n=strlen(S+1);
	for(int i=2;i<n;i++)if(S[i-1]==S[i+1])ca[i]=1;
	memset(sg,-1,sizeof(sg));
	sg[0]=0,sg[1]=1;
	if(calc()){
		puts("First");
		for(int i=1,k1,k2,k3;i<=n;i++)
			if(ca[i]){
				k1=ca[i-1],k2=ca[i],k3=ca[i+1];
				ca[i-1]=0,ca[i]=0,ca[i+1]=0;
				if(!calc()){
					printf("%d\n",i);
					break;
				}
				ca[i-1]=k1,ca[i]=k2,ca[i+1]=k3;
			}
	}else puts("Second");
	return 0;
}


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=5005;
char S[M];
int sg[M],mark[M],ca[M];
int n;
int dfs(int x){
	if(x<0)return 0;
	int &re=sg[x];
	if(re!=-1)return re;
	static int mk[M],TIM;TIM++;
	for(int i=1;i<=x;i++)mk[dfs(i-2)^dfs(x-i-1)]=TIM;
	for(int i=0;;i++)if(mk[i]!=TIM)return re=i;
}
int calc(){
	int c=0,ans=0;
	for(int i=1;i<=n;i++)
		if(ca[i]&&!mark[i-1]&&!mark[i+1]&&!mark[i])c++;
		else ans^=dfs(c),c=0;
	return ans;
}
int main(){
	scanf("%s",S+1);n=strlen(S+1);
	for(int i=2;i<n;i++)if(S[i-1]==S[i+1])ca[i]=1;
	memset(sg,-1,sizeof(sg));
	sg[0]=0,sg[1]=1;
	if(calc()){
		puts("First");
		for(int i=2;i<n;i++)
			if(ca[i]){
				mark[i]=1;
				if(!calc()){
					printf("%d\n",i);
					break;
				}
				mark[i]=0;
			}
	}else puts("Second");
	return 0;
}


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=5005;
char S[M],mark[M];
int sg[M];
int n;
int dfs(int x){
	if(x<0)return 0;
	int &re=sg[x];
	if(re!=-1)return re;
	static int pl[M],psz;psz=0;
	for(int i=1;i<=x;i++)pl[psz++]=dfs(i-2)^dfs(x-i-1);
	sort(pl,pl+psz);
	if(pl[0]!=0)return re=0;
	for(int i=1;i<psz;i++)if(pl[i]!=pl[i-1]&&pl[i]!=pl[i-1]+1)return re=pl[i-1]+1;
	return re=pl[psz-1]+1;
}
int calc(){
	int c=0,ans=0;
	for(int i=2;i<n;i++)
		if(S[i-1]==S[i+1]&&!mark[i-1]&&!mark[i+1]&&!mark[i])c++;
		else ans^=dfs(c),c=0;
	ans^=dfs(c);
	return ans;
}
int main(){
	scanf("%s",S+1);n=strlen(S+1);
	memset(sg,-1,sizeof(sg));
	sg[0]=0,sg[1]=1;
	if(calc()){
		puts("First");
		for(int i=2;i<=n;i++)
			if(S[i-1]==S[i+1]){
				mark[i]=1;
				if(!calc()){
					printf("%d\n",i);
					break;
				}
				mark[i]=0;
			}
	}else puts("Second");
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
const int maxn=5015;
int n,sg[maxn],can[maxn];
bool lose(){
	int sum=0,j;
	for (int i=1;i<=n;i=j+1){
		for (j=i;can[j]&&j<=n;++j);
		sum^=sg[j-i];
	}
	return !sum;
}
bool vis[maxn];
void prepare(){
	sg[0]=0;sg[1]=1;
	for (int i=2;i<=5000;++i){
		memset(vis,0,sizeof(vis));
		vis[sg[i-2]]=1;
		for (int j=2;j<=i-1;++j) vis[sg[j-2]^sg[i-(j+1)]]=1;
		for (sg[i]=0;vis[sg[i]];++sg[i]);
	}
}
char s[maxn];
int main(){
	scanf("%s",s+1);n=strlen(s+1);
	prepare();
	for (int i=2;i<=n-1;++i) can[i]=(s[i-1]==s[i+1]);
	for (int i=2;i<=n-1;++i)
		if (can[i]){
			int a=can[i-1],b=can[i+1];
			can[i-1]=can[i+1]=can[i]=0;
			if (lose()){printf("First\n%d\n",i);return 0;}
			can[i-1]=a;can[i+1]=b;can[i]=1;
		}
	puts("Second");
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
const int maxn=5015;
int n,sg[maxn],can[maxn];
int solve(int len){
	if (len==-1) return 0;
	if (sg[len]!=-1) return sg[len];
	static bool vis[maxn];
	memset(vis,0,sizeof(vis));
	for (int i=1;i<=len;++i)
		vis[solve(i-2)^solve(len-(i+1))]=1;
	for (sg[len]=0;vis[sg[len]];++sg[len]);
	return sg[len];
}
int lose(){
	int sg=0,j;
	for (int i=1;i<=n;i=j+1){
		for (j=i;can[j]&&j<=n;++j);
		sg^=solve(j-i);
	}
	return !sg;
}
char s[maxn];
int main(){
	scanf("%s",s+1);n=strlen(s+1);
	memset(sg,-1,sizeof(sg));
	for (int i=2;i<=n-1;++i) can[i]=(s[i-1]==s[i+1]);
	for (int i=2;i<=n-1;++i)
		if (can[i]){
			int a=can[i-1],b=can[i+1];
			can[i-1]=can[i+1]=can[i]=0;
			if (lose()){printf("First\n%d\n",i);return 0;}
			can[i-1]=a;can[i+1]=b;can[i]=1;
		}
	puts("Second");
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
const int maxn=5015;
int n,sg[maxn],can[maxn];
int solve(int len){
	if (len==-1) return 0;
	if (sg[len]!=-1) return sg[len];
	static bool vis[maxn];
	memset(vis,0,sizeof(vis));
	for (int i=1;i<=len;++i)
		vis[solve(i-2)^solve(len-(i+1))]=1;
	for (sg[len]=0;vis[sg[len]];++sg[len]);
	return sg[len];
}
int lose(){
	int sg=0,j;
	for (int i=1;i<=n;i=j+1){
		for (j=i;can[j]&&j<=n;++j);
		sg^=solve(j-i);
	}
	return !sg;
}
char s[maxn];
int main(){
	scanf("%s",s+1);n=strlen(s+1);
	memset(sg,-1,sizeof(sg));sg[1]=1;sg[0]=0;
	for (int i=2;i<=n-1;++i) can[i]=(s[i-1]==s[i+1]);
	for (int i=2;i<=n-1;++i)
		if (can[i]){
			int a=can[i-1],b=can[i+1];
			can[i-1]=can[i+1]=can[i]=0;
			if (lose()){printf("First\n%d\n",i);return 0;}
			can[i-1]=a;can[i+1]=b;can[i]=1;
		}
	puts("Second");
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
const int maxn=5015;
int n,sg[maxn],can[maxn];
int solve(int len){
	if (len==-1) return 0;
	if (sg[len]!=-1) return sg[len];
	static bool vis[maxn];
	memset(vis,0,sizeof(vis));
	for (int i=1;i<=len;++i)
		vis[solve(i-2)^solve(len-(i+1))]=1;
	for (sg[len]=0;vis[sg[len]];++sg[len]);
	return sg[len];
}
int lose(){
	int sg=0,j;
	for (int i=1;i<=n;i=j+1){
		for (j=i;can[j];++j);
		sg^=solve(j-i);
	}
	return !sg;
}
char s[maxn];
int main(){
	scanf("%s",s+1);n=strlen(s+1);
	memset(sg,-1,sizeof(sg));
	for (int i=2;i<=n-1;++i) can[i]=(s[i-1]==s[i+1]);
	for (int i=2;i<=n-1;++i)
		if (can[i]){
			int a=can[i-1],b=can[i+1];
			can[i-1]=can[i+1]=can[i]=0;
			if (lose()){printf("First\n%d\n",i);return 0;}
			can[i-1]=a;can[i+1]=b;can[i]=1;
		}
	puts("Second");
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
const int maxn=5015;
int n,sg[maxn],can[maxn];
int solve(int len){
    if (len==-1) return 0;
    if (sg[len]!=-1) return sg[len];
    static bool vis[maxn];
    memset(vis,0,sizeof(vis));
    for (int i=1;i<=len;++i)
        vis[solve(i-2)^solve(len-(i+1))]=1;
    for (sg[len]=0;vis[sg[len]];++sg[len]);
    return sg[len];
}
bool lose(){
    int sum=0,j;
    for (int i=1;i<=n;i=j+1){
        for (j=i;can[j]&&j<=n;++j);
        sum^=solve(sg[j-i]);
    }
    return !sum;
}
char s[maxn];
int main(){
    scanf("%s",s+1);n=strlen(s+1);
    memset(sg,-1,sizeof(sg));sg[1]=1;sg[0]=0;
    for (int i=2;i<=5000;++i) sg[i]=solve(i);
    for (int i=2;i<=n-1;++i) can[i]=(s[i-1]==s[i+1]);
    for (int i=2;i<=n-1;++i)
        if (can[i]){
            int a=can[i-1],b=can[i+1];
            can[i-1]=can[i+1]=can[i]=0;
            if (lose()){printf("First\n%d\n",i);return 0;}
            can[i-1]=a;can[i+1]=b;can[i]=1;
        }
    puts("Second");
    return 0;
}


#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int maxn = 5008;
int n, sg[maxn];
char S[maxn];
bool f[maxn], pl[maxn];

inline int Calc(bool *pl, int n) {
    int cnt = 1, cur = 0;
    pl[n] = false;
    for (int i = 2; i <= n; i++) {
        cnt++;
        if (!pl[i])
            cur ^= sg[cnt], cnt = 1;
    }
    if (S[n - 1] == S[n + 1])
        pl[n] = true;
    return cur;
}

inline bool Judge(int pos) {
    int x = Calc(pl, pos - 1);
    int y = Calc(pl + pos, n - pos);
    return ((x ^ y) == 0);
}

int main() {
    scanf("%s", S + 1); n = strlen(S + 1);
    sg[1] = 0, sg[2] = 0;
    for (int i = 3; i <= n; i++) {
        fill(f, f + i + 1, 0); int p = 0;
        for (int j = 2; j <= i - 1; j++) {
            int tmp = sg[j - 1] ^ sg[i - j];
            f[tmp] = true;
        }
        while (f[p]) p++;
        sg[i] = p;
    }
    for (int i = 2; i < n; i++)
        if (S[i - 1] == S[i + 1]) pl[i] = true;
    for (int i = 2; i < n; i++)
        if (pl[i]) if (Judge(i)) {
            printf("First\n%d\n", i);
            return 0;
        }
    printf("Second\n");
    return 0;
}


#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#define maxn 6010
int sg[maxn];
char s[maxn];
bool bb[maxn];
using namespace std;
int dfs(int l,int r){
	int tt=1,ans=0;bb[r]=0;
	for(int i=l+1;i<=r;i++){
		tt++;
		if(!bb[i]){
			ans^=sg[tt];
			tt=1;
		}
	}
	if(s[r+1]==s[r-1])bb[r]=true;
	return ans;
}
int ans;
int main(){
	scanf("%s",s+1);
	int n=strlen(s+1);
	for(int i=3;i<=n;i++){
		memset(bb,0,(i+1)*sizeof(int));
		for(int j=2;j<i;j++)bb[sg[j-1]^sg[i-j]]=1;
		int p=0;while(bb[p])sg[i]=++p;
	//	printf("%d %d\n",sg[i],i);
	}
	memset(bb,0,sizeof(bb));ans=0;
	for(int i=2;i<n;i++)if(s[i-1]==s[i+1])bb[i]=true;
	for(int i=2;i<n;i++)if(bb[i]){
	//	printf("%d %d %d\n",i,dfs(1,i-1),dfs(i+1,n));
		if((dfs(1,i-1)^dfs(i+1,n))==0){
			ans=i;
			break;
		}
	}
	if(ans)printf("First\n%d\n",ans);
	else printf("Second");
//	system("pause");
	return 0;
}


#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int maxn = 5008;
int n, sg[maxn];
char S[maxn];
bool f[maxn], pl[maxn];

inline int Calc(bool *pl, int n) {
    int cnt = 1, cur = 0;
    pl[n] = false;
    for (int i = 2; i <= n; i++) {
        cnt++;
        if (!pl[i])
            cur ^= sg[cnt], cnt = 1;
    }
    if (S[n - 1] == S[n + 1])
        pl[n] = true;
    return cur;
}

inline bool Judge(int pos) {
    int x = Calc(pl, pos - 1);
    int y = Calc(pl + pos, n - pos);
    return ((x ^ y) == 0);
}

int main() {
    scanf("%s", S + 1); n = strlen(S + 1);
    sg[1] = 0, sg[2] = 0;
    for (int i = 1; i <= n; i++) {
        fill(f, f + i + 1, 0); int p = 0;
        for (int j = 2; j <= i - 1; j++) {
            int tmp = sg[j - 1] ^ sg[i - j];
            f[tmp] = true;
        }
        while (f[p]) p++;
        sg[i] = p;
    }
    for (int i = 2; i < n; i++)
        if (S[i - 1] == S[i + 1]) pl[i] = true;
    for (int i = 2; i < n; i++)
        if (pl[i]) if (Judge(i)) {
            printf("First\n%d\n", i);
            return 0;
        }
    printf("Second\n");
    return 0;
}


#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#define maxn 6010
int sg[maxn];
char s[maxn];
bool bb[maxn];
using namespace std;
int dfs(int l,int r){
    int tt=1,ans=0;bb[r]=0;
    for(int i=l+1;i<=r;i++){
        tt++;
        if(!bb[i]){
            ans^=sg[tt];
            tt=1;
        }
    }
    if(s[r+1]==s[r-1])bb[r]=true;
    return ans;
}
int ans;
int main(){
    scanf("%s",s+1);
    int n=strlen(s+1);
    for(int i=3;i<=n;i++){
     memset(bb,0,(i+1)*sizeof(int));
     //   memset(bb,0,sizeof(bb));
int p=0;
        for(int j=2;j<i;j++){
            bb[sg[j-1]^sg[i-j]]=1;
        }
        while(bb[p])++p;
        sg[i]=p;
    //  printf("%d %d\n",sg[i],i);
    }
    memset(bb,0,sizeof(bb));ans=0;
    for(int i=2;i<n;i++)if(s[i-1]==s[i+1])bb[i]=true;
    for(int i=2;i<n;i++)if(bb[i]){
    //  printf("%d %d %d\n",i,dfs(1,i-1),dfs(i+1,n));
        if((dfs(1,i-1)^dfs(i+1,n))==0){
            ans=i;
            break;
        }
    }
    if(ans)printf("First\n%d\n",ans);
    else printf("Second");
   // system("pause");
    return 0;
}


#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#define maxn 5010
int sg[maxn];
char s[maxn];
bool bb[maxn];
using namespace std;
int dfs(int l,int r){
    int tt=1,ans=0;bb[r]=0;
    for(int i=l+1;i<=r;i++){
        tt++;
        if(!bb[i]){
            ans^=sg[tt];
            tt=1;
        }
    }
    if(s[r+1]==s[r-1])bb[r]=true;
    return ans;
}
int ans;
int main(){
    scanf("%s",s+1);
    int n=strlen(s+1);
    for(int i=3;i<=n;i++){
        memset(bb,0,(i+1)*sizeof(int));
        for(int j=2;j<i;j++)bb[sg[j-1]^sg[i-j]]=1;
        int p=0;while(bb[p])sg[i]=++p;
    //  printf("%d %d\n",sg[i],i);
    }
    memset(bb,0,sizeof(bb));
    for(int i=2;i<n;i++)if(s[i-1]==s[i+1])bb[i]=true;
    for(int i=2;i<n;i++)if(bb[i]){
//      printf("%d %d %d\n",i,dfs(1,i-1),dfs(i+1,n));
        if(dfs(1,i-1)^dfs(i+1,n)==0){
            ans=i;
            break;
        }
    }
    if(ans)printf("First\n%d\n",ans);
    else printf("Second");
//  system("pause");
    return 0;
}


#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#define maxn 5010
int sg[maxn];
char s[maxn];
bool bb[maxn];
using namespace std;
int dfs(int l,int r){
    int tt=1,ans=0;bb[r]=0;
    for(int i=l+1;i<=r;i++){
        tt++;
        if(!bb[i]){
            ans^=sg[tt];
            tt=1;
        }
    }
    if(s[r+1]==s[r-1])bb[r]=true;
    return ans;
}
int ans;
int main(){
    scanf("%s",s+1);
    int n=strlen(s+1);
    for(int i=3;i<=n;i++){
        memset(bb,0,(i+1)*sizeof(int));
        for(int j=2;j<i;j++)bb[sg[j-1]^sg[i-j]]=1;
        int p=0;while(bb[p])sg[i]=++p;
    //  printf("%d %d\n",sg[i],i);
    }
    memset(bb,0,sizeof(bb));ans=0;
    for(int i=2;i<n;i++)if(s[i-1]==s[i+1])bb[i]=true;
    for(int i=2;i<n;i++)if(bb[i]){
    //  printf("%d %d %d\n",i,dfs(1,i-1),dfs(i+1,n));
        if((dfs(1,i-1)^dfs(i+1,n))==0){
            ans=i;
            break;
        }
    }
    if(ans)printf("First\n%d\n",ans);
    else printf("Second");
//  system("pause");
    return 0;
}


#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#define maxn 6010
int sg[maxn];
char s[maxn];
bool bb[maxn];
using namespace std;
int dfs(int l,int r){
    int tt=1,ans=0;bb[r]=0;
    for(int i=l+1;i<=r;i++){
        tt++;
        if(!bb[i]){
            ans^=sg[tt];
            tt=1;
        }
    }
    if(s[r+1]==s[r-1])bb[r]=true;
    return ans;
}
int ans;
int main(){
    scanf("%s",s+1);
    int n=strlen(s+1);
    for(int i=3;i<=n;i++){
     memset(bb,0,(i+3)*sizeof(int));
     //   memset(bb,0,sizeof(bb));
int p=0;
        for(int j=2;j<i;j++){
            bb[sg[j-1]^sg[i-j]]=1;
        }
        while(bb[p])++p;
        sg[i]=p;
    //  printf("%d %d\n",sg[i],i);
    }
    memset(bb,0,sizeof(bb));ans=0;
    for(int i=2;i<n;i++)if(s[i-1]==s[i+1])bb[i]=true;
    for(int i=2;i<n;i++)if(bb[i]){
    //  printf("%d %d %d\n",i,dfs(1,i-1),dfs(i+1,n));
        if((dfs(1,i-1)^dfs(i+1,n))==0){
            ans=i;
            break;
        }
    }
    if(ans)printf("First\n%d\n",ans);
    else printf("Second");
   // system("pause");
    return 0;
}


#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#define maxn 6010
int sg[maxn];
char s[maxn];
bool bb[maxn];
using namespace std;
int dfs(int l,int r){
	int tt=1,ans=0;bb[r]=0;
	for(int i=l+1;i<=r;i++){
		tt++;
		if(!bb[i]){
			ans^=sg[tt];
			tt=1;
		}
	}
	if(s[r+1]==s[r-1])bb[r]=true;
	return ans;
}
int ans;
int main(){
	scanf("%s",s+1);
	int n=strlen(s+1);
	for(int i=3;i<=n;i++){
		memset(bb,0,(i+1)*sizeof(bool));
		//memset(bb,0,sizeof(bb));
		int p=0;
		for(int j=2;j<i;j++){
			bb[sg[j-1]^sg[i-j]]=1;
		}
		while(bb[p])++p;
		sg[i]=p;
	//	printf("%d %d\n",sg[i],i);
	}
	memset(bb,0,sizeof(bb));ans=0;
	for(int i=2;i<n;i++)if(s[i-1]==s[i+1])bb[i]=true;
	for(int i=2;i<n;i++)if(bb[i]){
	//	printf("%d %d %d\n",i,dfs(1,i-1),dfs(i+1,n));
		if((dfs(1,i-1)^dfs(i+1,n))==0){
			ans=i;
			break;
		}
	}
	if(ans)printf("First\n%d\n",ans);
	else printf("Second");
//	system("pause");
	return 0;
}


#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#define maxn 6010
int sg[maxn];
char s[maxn];
bool bb[maxn];
using namespace std;
int dfs(int l,int r){
    int tt=1,ans=0;bb[r]=0;
    for(int i=l+1;i<=r;i++){
        tt++;
        if(!bb[i]){
            ans^=sg[tt];
            tt=1;
        }
    }
    if(s[r+1]==s[r-1])bb[r]=true;
    return ans;
}
int ans;
int main(){
    scanf("%s",s+1);
    int n=strlen(s+1);
    for(int i=3;i<=n;i++){
//      memset(bb,0,(i+1)*sizeof(int));
        memset(bb,0,sizeof(bb));int p=0;
        for(int j=2;j<i;j++){
            bb[sg[j-1]^sg[i-j]]=1;
        }
        while(bb[p])++p;
        sg[i]=p;
    //  printf("%d %d\n",sg[i],i);
    }
    memset(bb,0,sizeof(bb));ans=0;
    for(int i=2;i<n;i++)if(s[i-1]==s[i+1])bb[i]=true;
    for(int i=2;i<n;i++)if(bb[i]){
    //  printf("%d %d %d\n",i,dfs(1,i-1),dfs(i+1,n));
        if((dfs(1,i-1)^dfs(i+1,n))==0){
            ans=i;
            break;
        }
    }
    if(ans)printf("First\n%d\n",ans);
    else printf("Second");
   // system("pause");
    return 0;
}


#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char s[5009];
int grundy[5009],mex[5009],n,totalxor;
int main()
{
    gets(s);
    for(int i=1;i<5005;i++)
    {
        memset(mex,0,sizeof(mex));
        for(int j=0;j<i;j++)
        {
            int left=max(0,j-1);
            int right =max(0,i-j-2);
            int txor=grundy[left]^grundy[right];
            if(txor<5005)mex[txor]++;
        }
        for(int j=0;;j++)
        {
            if(!mex[j])
            {
                grundy[i]=j;
                break;
            }
        }
    }
    n=strlen(s);
    {
        for(int i=1;i<n-1;i++)
        {
            if(s[i]-1==s[i+1])
            {
                int j=i;
                while(j+2<n&&s[j]==s[j+1])j++;
                totalxor^=grundy[j-i+1];
                i=j+1;
            }
        }
    }
    if(totalxor!=0)
    {
        puts("First");
        for(int i=1;i<n-1;i++)
        {
            if(s[i-1]==s[i+1])
            {
                int j=i;
                while(j+2<n&&s[j]==s[j+2])j++;
                int len=j-i+1;
                int nowxor=totalxor^grundy[len];
                for(int k=0;k<len;k++)
                {
                    int left=max(0,k-1);
                    int right=max(0,len-k-2);
                    int resxor=nowxor^grundy[left]^grundy[right];
                    if(resxor==0)
                    {
                        printf("%d\n",i+k+1);
                        return 0;
                    }
                }
                i=j+1;
            }
        }
    }
    puts("Second");
}


#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char s[5009];
int grundy[5009],mex[5009],n,totalxor;
int main()
{
    gets(s);
    for(int i=1;i<5005;i++)
    {
        memset(mex,0,sizeof(mex));
        for(int j=0;j<i;j++)
        {
            int left=max(0,j-1);
            int right =max(0,i-j-2);
            int txor=grundy[left]^grundy[right];
            if(txor<5005)mex[txor]++;
        }
        for(int j=0;;j++)
        {
            if(!mex[j])
            {
                grundy[i]=j;
                break;
            }
        }
    }
    n=strlen(s);
    {
        for(int i=1;i<n-1;i++)
        {
            if(s[i-1]==s[i+1])
            {
                int j=i;
                while(j+2<n&&s[j]==s[j+1])j++;
                totalxor^=grundy[j-i+1];
                i=j+1;
            }
        }
    }
    if(totalxor!=0)
    {
        puts("First");
        for(int i=1;i<n-1;i++)
        {
            if(s[i-1]==s[i+1])
            {
                int j=i;
                while(j+2<n&&s[j]==s[j+2])j++;
                int len=j-i+1;
                int nowxor=totalxor^grundy[len];
                for(int k=0;k<len;k++)
                {
                    int left=max(0,k-1);
                    int right=max(0,len-k-2);
                    int resxor=nowxor^grundy[left]^grundy[right];
                    if(resxor==0)
                    {
                        printf("%d\n",i+k+1);
                        return 0;
                    }
                }
                i=j+1;
            }
        }
    }
    puts("Second");
}


#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char s[5009];
int grundy[5009],mex[5009],n,totalxor;
int main()
{
    gets(s);
    for(int i=1;i<5005;i++)
    {
        memset(mex,0,sizeof(mex));
        for(int j=0;j<i;j++)
        {
            int left=max(0,j-1);
            int right =max(0,i-j-2);
            int txor=grundy[left]^grundy[right];
            if(txor<5005)mex[txor]++;
        }
        for(int j=0;;j++)
        {
            if(!mex[j])
            {
                grundy[i]=j;
                break;
            }
        }
    }
    n=strlen(s);
    {
        for(int i=1;i<n-1;i++)
        {
            if(s[i-1]==s[i+1])
            {
                int j=i;
                while(j+2<n&&s[j]==s[j+2])j++;
                totalxor^=grundy[j-i+1];
                i=j+1;
            }
        }
    }
    if(totalxor!=0)
    {
        puts("First");
        for(int i=1;i<n-1;i++)
        {
            if(s[i-1]==s[i+1])
            {
                int j=i;
                while(j+2<n&&s[j]==s[j+2])j++;
                int len=j-i+1;
                int nowxor=totalxor^grundy[len];
                for(int k=0;k<len;k++)
                {
                    int left=max(0,k-1);
                    int right=max(0,len-k-2);
                    int resxor=nowxor^grundy[left]^grundy[right];
                    if(resxor==0)
                    {
                        printf("%d\n",i+k+1);
                        return 0;
                    }
                }
                i=j+1;
            }
        }
    }
    puts("Second");
}


#include <cstdio>
#include <algorithm>
using namespace std;

const int MAXN = 5000 + 86;

char s[MAXN];
int sg[MAXN], p[MAXN], sz;
int a[MAXN], b[MAXN], c;

void init() {
	sg[0] = 0;
	for (int i=1; i<MAXN; ++i) {
		bool v[10]={false};
		for (int j=0; j+j+3<=i; ++j) v[sg[j] ^ sg[i-3-j]] = true;
		v[sg[max(0, i-2)]] = true;
		for (int j=0; ; ++j) if (!v[j]) { sg[i] = j; break; }
	}
}

int main() {
	init();

	scanf("%s", s);
	for (int i=1; s[i]; ++i) if (s[i-1] == s[i+1]) p[sz++] = i;
	int t = 0, st = 0, cc = 1;
	for (int i=0; i<sz; ++i) {
		if (p[i] + 1 == p[i+1]) ++cc;
		else t ^= sg[cc], a[c] = p[st] + 1, b[c++] = cc, cc = 1, st = i + 1;
	}
	if (!t) return puts("Second"), 0;
	puts("First");
	for (int i=0; i<c; ++i) {
		cc = sg[b[i]] ^ t;
		if (sg[max(b[i]-2, 0)] == cc) return printf("%d\n", a[i]), 0;
		for (int j=0; j+j+3<=b[i]; ++j) if ((sg[j] ^ sg[b[i]-3-j]) == cc) return printf("%d\n", a[i]+j+1), 0;
	}

	return 0;
}


#include <cstdio>
#include <algorithm>
using namespace std;

const int MAXN = 5000 + 86;

char s[MAXN];
int sg[MAXN], p[MAXN], sz;
int a[MAXN], b[MAXN], c;

void init() {
	sg[0] = 0;
	for (int i=1; i<MAXN; ++i) {
		bool v[10]={false};
		for (int j=0; j+j+3<=i; ++j) v[sg[j] ^ sg[i-3-j]] = true;
		v[sg[max(0, i-2)]] = true;
		for (int j=0; ; ++j) if (!v[j]) { sg[i] = j; break; }
	}
}

int main() {
	init();

	scanf("%s", s);
	for (int i=1; s[i]; ++i) if (s[i-1] == s[i+1]) p[sz++] = i;
	int t = 0, st = 0, cc = 1;
	for (int i=0; i<sz; ++i) {
		if (p[i] + 1 == p[i+1]) ++cc;
		else t ^= sg[cc], a[c] = p[st] + 1, b[c++] = cc, cc = 1, st = i + 1;
	}
	if (!t) return puts("Second"), 0;
	puts("First");
	for (int i=0; i<c; ++i) if (sg[b[i]] ^ t < sg[b[i]]) {
		cc = sg[b[i]] ^ t;
		if (sg[max(b[i]-2, 0)] == cc) return printf("%d\n", a[i]), 0;
		for (int j=0; j+j+3<=b[i]; ++j) if (sg[j] ^ sg[b[i]-3-j] == cc) return printf("%d\n", a[i]+j+1), 0;
	}

	return 0;
}


#include <cstdio>
#include <algorithm>
using namespace std;

const int MAXN = 5000 + 86;

char s[MAXN];
int sg[MAXN], p[MAXN], sz;
int a[MAXN], b[MAXN], c;

void init() {
	sg[0] = 0;
	for (int i=1; i<MAXN; ++i) {
		bool v[10]={false};
		for (int j=0; j+j+3<=i; ++j) v[sg[j] ^ sg[i-3-j]] = true;
		v[sg[max(0, i-2)]] = true;
		for (int j=0; ; ++j) if (!v[j]) { sg[i] = j; break; }
	}
}

int main() {
	init();

	scanf("%s", s);
	for (int i=1; s[i]; ++i) if (s[i-1] == s[i+1]) p[sz++] = i;
	int t = 0, st = 0, cc = 1;
	for (int i=0; i<sz; ++i) {
		if (p[i] + 1 == p[i+1]) ++cc;
		else t ^= sg[cc], a[c] = p[st] + 1, b[c++] = cc, cc = 1, st = i + 1;
	}
	if (!t) return puts("Second"), 0;
	puts("First");
	for (int i=0; i<c; ++i) if (b[i] ^ t < b[i]) {
		cc = b[i] ^ t;
		if (sg[max(b[i]-2, 0)] == cc) return printf("%d\n", a[i]), 0;
		for (int j=0; j+j+3<=b[i]; ++j) if (sg[j] ^ sg[b[i]-3-j] == cc) return printf("%d\n", a[i]+j+1), 0;
	}

	return 0;
}


#include <iostream>
#include <fstream>
#include <sstream>
#include <string.h>
#include <algorithm>
#include <cmath>
#include <assert.h>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <set>

#define for0(i,n) for (int i=0; i<n; i++)
#define forr(i,n) for (int i=n-1; i>=0; i--)
#define fori(i,a,b) for (int i=a; i<=b; i++)
#define iter(c,x) for(x::iterator it=c.begin(); it!=c.end(); it++)
#define vec(x) vector< x >
#define pb push_back
#define ms(a,z) memset(a,z,sizeof(a));
#define mp make_pair
#define nl cout<<"\n";
#define pr(x) cout<<(x)<<" ";
#define prl(x) cout<<#x " = "<<x<<endl;
#define prp(x) cout<<"("<<(x).first<<" "<<(x).second<<") ";
#define printv(v) {for(int _=0; _<size(v); _++) cout<<v[_]<<" "; cout<<"\n";}
#define printa(a,s) {for (int _=0; _<s; _++) cout<<a[_]<<" "; cout<<"\n";}
#define print2D(a,m,n) {for (int _=0; _<m; _++) {for (int __=0; __<n; __++) cout<<a[_][__]<<" "; cout<<"\n";} cout<<"\n";}
#define debug cout<<"ok at line "<<__LINE__<<endl;
#define X first
#define Y second
#define sqr(x) 1LL*(x)*(x)
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define all(a) a.begin(),a.end()
#define size(x) (int)(x).size()
#define read(x) scanf("%I64d",&x);
#define int long long

using namespace std;

typedef long long ll;

const int INF = 999999999;
const long long INFL = 99999999999999999LL;
const double EPSILON = 0.00000001;
const long long MOD = 1000000007;

int grundy[5005];
bool states[5005];

int solve(string s)
{
    int res = 0;
    int i = 1;
    while (i < size(s)-1){
        if (s[i-1] != s[i+1]){
            i++;
            continue;
        }

        int j = i+1;
        while (j<size(s)-1 and s[j-1] == s[j+1]) j++;
        //pr(i) pr(j) nl
        res ^= grundy[j-i];
        i = j;
    }

    return res;
}

int32_t main()
{
    //freopen("playing_with_string.txt","r",stdin);
    //freopen("P_output.txt","w",stdout);
    string s;
    cin >> s;

    grundy[0] = 0;
    grundy[1] = 1;
    grundy[2] = 1;
    for (int n=3; n<=size(s); n++){
        ms(states,false);
        states[grundy[n-2]] = true;
        states[grundy[n-3]] = true;

        for (int i=1; i+4<=n; i++){
            int j = n-i-3;
            states[grundy[i]^grundy[j]] = true;
        }

        int i = 0;
        while (states[i]) i++;
        grundy[n] = i;
    }
    //printa(grundy,10);

    int res = solve(s);

    if (res == 0){
        cout<<"Second\n";
    }
    else{
        cout<<"First\n";
        for (int i=1; i<size(s)-1; i++){
            if (s[i-1] == s[i+1]){
                string temp = s;
                temp[i] = '#';
                temp.insert(i,"#");
                //pr(temp) nl
                int res = solve(temp);
                //pr(i) pr(res) nl
                if (res == 0){
                    cout<<i+1<<endl;
                    break;
                }
            }
        }
    }
    return 0;
}


#include <iostream>
#include <fstream>
#include <sstream>
#include <string.h>
#include <algorithm>
#include <cmath>
#include <assert.h>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <set>

#define for0(i,n) for (int i=0; i<n; i++)
#define forr(i,n) for (int i=n-1; i>=0; i--)
#define fori(i,a,b) for (int i=a; i<=b; i++)
#define iter(c,x) for(x::iterator it=c.begin(); it!=c.end(); it++)
#define vec(x) vector< x >
#define pb push_back
#define ms(a,z) memset(a,z,sizeof(a));
#define mp make_pair
#define nl cout<<"\n";
#define pr(x) cout<<(x)<<" ";
#define prl(x) cout<<#x " = "<<x<<endl;
#define prp(x) cout<<"("<<(x).first<<" "<<(x).second<<") ";
#define printv(v) {for(int _=0; _<size(v); _++) cout<<v[_]<<" "; cout<<"\n";}
#define printa(a,s) {for (int _=0; _<s; _++) cout<<a[_]<<" "; cout<<"\n";}
#define print2D(a,m,n) {for (int _=0; _<m; _++) {for (int __=0; __<n; __++) cout<<a[_][__]<<" "; cout<<"\n";} cout<<"\n";}
#define debug cout<<"ok at line "<<__LINE__<<endl;
#define X first
#define Y second
#define sqr(x) 1LL*(x)*(x)
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define all(a) a.begin(),a.end()
#define size(x) (int)(x).size()
#define read(x) scanf("%I64d",&x);
#define int long long

using namespace std;

typedef long long ll;

const int INF = 999999999;
const long long INFL = 99999999999999999LL;
const double EPSILON = 0.00000001;
const long long MOD = 1000000007;

string s;
int ans;
int mem[5005][5005];

bool solve(int l, int r)
{
    if (r-l+1 <= 2) return 0;
    if (mem[l][r] != -1) return mem[l][r];
    for (int i=l+1; i<r; i++){
        if (s[i-1] == s[i+1]){
            bool a = solve(l,i-1), b = solve(i+1,r);
            if (!(a^b)){
                ans = i;
                mem[l][r] = 1;
                return 1;
            }
        }
    }
    mem[l][r] = 0;
    return 0;
}

int32_t main()
{
    //freopen("playing_with_string.txt","r",stdin);
    //freopen("P_output.txt","w",stdout);
    cin >> s;
    ms(mem,-1);
    bool win = solve(0,size(s)-1);

    if (win){
        cout<<"First\n";
        cout<<ans+1<<endl;
    }
    else{
        cout<<"Second\n";
    }
    return 0;
}


#include <iostream>
#include <fstream>
#include <sstream>
#include <string.h>
#include <algorithm>
#include <cmath>
#include <assert.h>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <set>

#define for0(i,n) for (int i=0; i<n; i++)
#define forr(i,n) for (int i=n-1; i>=0; i--)
#define fori(i,a,b) for (int i=a; i<=b; i++)
#define iter(c,x) for(x::iterator it=c.begin(); it!=c.end(); it++)
#define vec(x) vector< x >
#define pb push_back
#define ms(a,z) memset(a,z,sizeof(a));
#define mp make_pair
#define nl cout<<"\n";
#define pr(x) cout<<(x)<<" ";
#define prl(x) cout<<#x " = "<<x<<endl;
#define prp(x) cout<<"("<<(x).first<<" "<<(x).second<<") ";
#define printv(v) {for(int _=0; _<size(v); _++) cout<<v[_]<<" "; cout<<"\n";}
#define printa(a,s) {for (int _=0; _<s; _++) cout<<a[_]<<" "; cout<<"\n";}
#define print2D(a,m,n) {for (int _=0; _<m; _++) {for (int __=0; __<n; __++) cout<<a[_][__]<<" "; cout<<"\n";} cout<<"\n";}
#define debug cout<<"ok at line "<<__LINE__<<endl;
#define X first
#define Y second
#define sqr(x) 1LL*(x)*(x)
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define all(a) a.begin(),a.end()
#define size(x) (int)(x).size()
#define read(x) scanf("%I64d",&x);
#define int long long

using namespace std;

typedef long long ll;

const int INF = 999999999;
const long long INFL = 99999999999999999LL;
const double EPSILON = 0.00000001;
const long long MOD = 1000000007;

string s;
int ans;
int mem[5005][5005];

int solve(int l, int r)
{
    if (r-l+1 <= 2) return 0;
    if (mem[l][r] != -1) return mem[l][r];
    for (int i=l+1; i<r; i++){
        if (s[i-1] == s[i+1]){
            int a = solve(l,i-1), b = solve(i+1,r);
            if (!(a^b)){
                ans = i;
                mem[l][r] = 1;
                return 1;
            }
        }
    }
    mem[l][r] = 0;
    return 0;
}

int32_t main()
{
    //freopen("playing_with_string.txt","r",stdin);
    //freopen("P_output.txt","w",stdout);
    cin >> s;
    ms(mem,-1);
    if (size(s) > 10){
        cout<<size(s)<<endl;
        return 0;
    }
    bool win = solve(0,size(s)-1);

    if (win){
        cout<<"First\n";
        cout<<ans+1<<endl;
    }
    else{
        cout<<"Second\n";
    }
    return 0;
}


#include <iostream>
#include <string>
#include <set>
#include <cstdlib>

using namespace std;

const int limite=10000;

int nimber[limite];
int puede[limite];
int cuantos[limite];
int inicio[limite];

int main()
{
  nimber[1]=nimber[2]=1;
  for (int i=3;i<limite;i++) {
    set<int> s;
    s.insert(nimber[i-2]);
    for (int j=2;j<i;j++) {
      s.insert(nimber[j-2]^nimber[i-j-1]);
    }
    int pos=0;
    for (set<int>::iterator it=s.begin();it!=s.end() and (*it)==pos;it++,pos++) ;
    nimber[i]=pos;
  }
  string s;
  cin>>s;
  for (int i=1;i<int(s.size())-1;i++)
    if (s[i-1]==s[i+1])
      puede[i]=1;
  for (int i=int(s.size())-2;i>=0;i--)
    if (puede[i])
      cuantos[i]=cuantos[i+1]+1;
  for (int i=1;i<int(s.size());i++)
    if (puede[i] and not puede[i-1])
      inicio[i]=1;
  int nim=0;
  for (int i=0;i<int(s.size());i++)
    if (inicio[i])
      nim^=nimber[cuantos[i]];
  if (nim==0) {
    cout<<"Second"<<endl;
    exit(0);
  }
  cout<<"First"<<endl;
  for (int i=0;i<int(s.size());i++) {
    if (inicio[i] and (nimber[cuantos[i]]^nim)<nimber[cuantos[i]]) {
      int objetivo=nimber[cuantos[i]]^nim;
      if (cuantos[i]==1 or cuantos[i]==2 or nimber[cuantos[i]-2]==objetivo) {
	cout<<i+1<<endl;
	exit(0);
      } else {
	for (int j=2;j<=cuantos[i]-1;j++) {
	  if ((nimber[j-2]^nimber[cuantos[i]-j-1])==objetivo) {
	    cout<<i+j<<endl;
	    exit(0);
	  }
	}
      }
    }
  }
}


#include <iostream>
#include <string>
#include <set>
#include <cstdlib>

using namespace std;

const int limite=6000;

int nimber[limite];
int puede[limite];
int cuantos[limite];
int inicio[limite];

int main()
{
  nimber[1]=nimber[2]=1;
  for (int i=3;i<limite;i++) {
    set<int> s;
    s.insert(nimber[i-2]);
    for (int j=2;j<i;j++) {
      s.insert(nimber[j-2]^nimber[i-j-1]);
    }
    int pos=0;
    for (set<int>::iterator it=s.begin();it!=s.end() and (*it)==pos;it++,pos++) ;
    nimber[i]=pos;
  }
  string s;
  cin>>s;
  for (int i=1;i<int(s.size())-1;i++)
    if (s[i-1]==s[i+1])
      puede[i]=1;
  for (int i=int(s.size())-2;i>=0;i--)
    if (puede[i])
      cuantos[i]=cuantos[i+1]+1;
  for (int i=1;i<int(s.size());i++)
    if (puede[i] and not puede[i-1])
      inicio[i]=1;
  int nim=0;
  for (int i=0;i<int(s.size());i++)
    if (inicio[i])
      nim^=nimber[cuantos[i]];
  if (nim==0) {
    cout<<"Second"<<endl;
    exit(0);
  }
  cout<<"First"<<endl;
  for (int i=0;i<int(s.size());i++) {
    if (inicio[i] and (nimber[cuantos[i]]^nim)<nimber[cuantos[i]]) {
      int objetivo=nimber[cuantos[i]]^nim;
      if (cuantos[i]==1 or cuantos[i]==2 or nimber[cuantos[i]-2]==objetivo) {
	cout<<i+1<<endl;
	exit(0);
      } else {
	for (int j=2;j<=cuantos[i]-1;j++) {
	  if ((nimber[j-2]^nimber[cuantos[i]-j-1])==objetivo) {
	    cout<<i+j<<endl;
	    exit(0);
	  }
	}
      }
    }
  }
}


#include <iostream>
#include <string>
#include <set>
#include <cstdlib>

using namespace std;

const int limite=5001;

int nimber[limite];
int puede[limite];
int cuantos[limite];
int inicio[limite];

int main()
{
  nimber[1]=nimber[2]=1;
  for (int i=3;i<limite;i++) {
    set<int> s;
    s.insert(nimber[i-2]);
    for (int j=2;j<i;j++) {
      s.insert(nimber[j-2]^nimber[i-j-1]);
    }
    int pos=0;
    for (set<int>::iterator it=s.begin();it!=s.end() and (*it)==pos;it++,pos++) ;
    nimber[i]=pos;
  }
  string s;
  cin>>s;
  for (int i=1;i<int(s.size())-1;i++)
    if (s[i-1]==s[i+1])
      puede[i]=1;
  for (int i=int(s.size())-2;i>=0;i--)
    if (puede[i])
      cuantos[i]=cuantos[i+1]+1;
  for (int i=1;i<int(s.size());i++)
    if (puede[i] and not puede[i-1])
      inicio[i]=1;
  int nim=0;
  for (int i=0;i<int(s.size());i++)
    if (inicio[i])
      nim^=nimber[cuantos[i]];
  if (nim==0) {
    cout<<"Second"<<endl;
    exit(0);
  }
  cout<<"First"<<endl;
  for (int i=0;i<int(s.size());i++) {
    if (inicio[i] and (nimber[cuantos[i]]^nim)<nimber[cuantos[i]]) {
      int objetivo=nimber[cuantos[i]]^nim;
      if (cuantos[i]==1 or cuantos[i]==2 or nimber[cuantos[i]-2]==objetivo) {
	cout<<i+1<<endl;
	exit(0);
      } else {
	for (int j=2;j<=cuantos[i]-1;j++) {
	  if ((nimber[j-2]^nimber[cuantos[i]-j-1])==objetivo) {
	    cout<<i+j<<endl;
	    exit(0);
	  }
	}
      }
    }
  }
}


#include <iostream>
#include <string>
#include <set>
#include <cstdlib>

using namespace std;

const int limite=5005;

int nimber[limite];
int puede[limite];
int cuantos[limite];
int inicio[limite];

int g[5010],next,seen[6010];
char t[5010];

int main()
{
  for(int i=1;i<5010;i++){
    ++next;
    for(int j=0;j<i;j++)seen[g[max(0,j-1)]^g[max(0,i-j-2)]]=next;
    g[i]=0;
    while(seen[g[i]]==next)++g[i];
//    printf("%d -> %d\n",i,g[i]);
  }

  nimber[1]=nimber[2]=1;
  for (int i=3;i<limite;i++) {
    set<int> s;
    s.insert(nimber[i-2]);
    for (int j=2;j<i;j++) {
      s.insert(nimber[j-2]^nimber[i-j-1]);
    }
    int pos=0;
    for (set<int>::iterator it=s.begin();it!=s.end() and (*it)==pos;it++,pos++) ;
    nimber[i]=pos;
  }

  for (int i=0;i<limite;i++) {
    if (g[i]!=nimber[i]) {
      cout<<"error"<<endl;
      exit(0);
    }
  }

  string s;
  cin>>s;
  for (int i=1;i<int(s.size())-1;i++)
    if (s[i-1]==s[i+1])
      puede[i]=1;
  for (int i=int(s.size())-2;i>=0;i--)
    if (puede[i])
      cuantos[i]=cuantos[i+1]+1;
  for (int i=1;i<int(s.size());i++)
    if (puede[i] and not puede[i-1])
      inicio[i]=1;
  int nim=0;
  for (int i=0;i<int(s.size());i++)
    if (inicio[i])
      nim^=nimber[cuantos[i]];
  if (nim==0) {
    cout<<"Second"<<endl;
    exit(0);
  }
  cout<<"First"<<endl;
  for (int i=0;i<int(s.size());i++) {
    if (inicio[i] and (nimber[cuantos[i]]^nim)<nimber[cuantos[i]]) {
      int objetivo=nimber[cuantos[i]]^nim;
      if (cuantos[i]==1 or cuantos[i]==2 or nimber[cuantos[i]-2]==objetivo) {
	cout<<i+1<<endl;
	exit(0);
      } else {
	for (int j=2;j<=cuantos[i]-1;j++) {
	  if ((nimber[j-2]^nimber[cuantos[i]-j-1])==objetivo) {
	    cout<<i+j<<endl;
	    exit(0);
	  }
	}
	cout<<"pifiada"<<endl;
      }
    }
  }
}


#include <iostream>
#include <string>
#include <set>
#include <cstdlib>

using namespace std;

const int limite=5005;

int nimber[limite];
int puede[limite];
int cuantos[limite];
int inicio[limite];

int main()
{
  nimber[1]=nimber[2]=1;
  for (int i=3;i<limite;i++) {
    set<int> s;
    s.insert(nimber[i-2]);
    for (int j=2;j<i;j++) {
      s.insert(nimber[j-2]^nimber[i-j-1]);
    }
    int pos=0;
    for (set<int>::iterator it=s.begin();it!=s.end() and (*it)==pos;it++,pos++) ;
    nimber[i]=pos;
  }
  string s;
  cin>>s;
  for (int i=1;i<int(s.size())-1;i++)
    if (s[i-1]==s[i+1])
      puede[i]=1;
  for (int i=int(s.size())-2;i>=0;i--)
    if (puede[i])
      cuantos[i]=cuantos[i+1]+1;
  for (int i=1;i<int(s.size());i++)
    if (puede[i] and not puede[i-1])
      inicio[i]=1;
  int nim=0;
  for (int i=0;i<int(s.size());i++)
    if (inicio[i])
      nim^=nimber[cuantos[i]];
  if (nim==0) {
    cout<<"Second"<<endl;
    exit(0);
  }
  cout<<"First"<<endl;
  for (int i=0;i<int(s.size());i++) {
    if (inicio[i]) {
      int objetivo=nimber[cuantos[i]]^nim;
      if ((cuantos[i]<=2 and objetivo==0) or
	  (cuantos[i]>2 and nimber[cuantos[i]-2]==objetivo)) {
	cout<<i+1<<endl;
	exit(0);
      } else {
	for (int j=2;j<=cuantos[i]-1;j++) {
	  if ((nimber[j-2]^nimber[cuantos[i]-j-1])==objetivo) {
	    cout<<i+j<<endl;
	    exit(0);
	  }
	}
      }
    }
  }
}


#include <iostream>
#include <string>
#include <set>
#include <cstdlib>

using namespace std;

const int limite=5001;

int nimber[limite];
int puede[limite];
int cuantos[limite];
int inicio[limite];

int main()
{
  nimber[1]=nimber[2]=1;
  for (int i=3;i<limite;i++) {
    set<int> s;
    s.insert(nimber[i-2]);
    for (int j=2;j<i;j++) {
      s.insert(nimber[j-2]^nimber[i-j-1]);
    }
    int pos=0;
    for (set<int>::iterator it=s.begin();it!=s.end() and (*it)==pos;it++,pos++) ;
    nimber[i]=pos;
  }
  string s;
  cin>>s;
  for (int i=1;i<int(s.size())-1;i++)
    if (s[i-1]==s[i+1])
      puede[i]=1;
  for (int i=int(s.size())-2;i>=0;i--)
    if (puede[i])
      cuantos[i]=cuantos[i+1]+1;
  for (int i=1;i<int(s.size());i++)
    if (puede[i] and not puede[i-1])
      inicio[i]=1;
  int nim=0;
  for (int i=0;i<int(s.size());i++)
    if (inicio[i])
      nim^=nimber[cuantos[i]];
  if (nim==0) {
    cout<<"Second"<<endl;
    exit(0);
  }
  cout<<"First"<<endl;
  for (int i=0;i<int(s.size());i++) {
    if (inicio[i] and (cuantos[i]^nim)<cuantos[i]) {
      int objetivo=cuantos[i]^nim;
      if (cuantos[i]==1 or cuantos[i]==2 or nimber[cuantos[i]-2]==objetivo) {
	cout<<i+1<<endl;
	exit(0);
      } else {
	for (int j=2;j<=cuantos[i]-1;j++) {
	  if ((nimber[j-2]^nimber[cuantos[i]-j-1])==objetivo) {
	    cout<<i+j<<endl;
	    exit(0);
	  }
	}
      }
    }
  }
}


#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <cmath>
#include <iostream>
#include <algorithm>
#define forup(i,a,b) for (int i=a;i<=b;i++)
#define fordown(i,a,b) for (int i=a;i>=b;--i)

using namespace std;

int sg[5001],n,f[5001][2];
char s1[5001];
bool b[5001],B[5001];

int main(){
    //freopen("1.txt","r",stdin);
    //freopen("2.txt","w",stdout);
    scanf("%s",s1);
    n=strlen(s1);
    memset(sg,0,sizeof(sg));
    forup(i,1,5000)
    {
         memset(b,false,sizeof(b));
         forup(j,1,i)
            if (j-1>i-j) break;
            else b[ sg[max(0,j-2)]^sg[max(0,i-j-1)] ]=true;
         forup(j,0,5000)
            if (!b[j])
            {
               sg[i]=j;
               break;
            }
    }
    int ans=0;
    memset(B,false,sizeof(B));
    forup(i,1,n-2)
        if (s1[i-1]==s1[i+1]) B[i]=true;
    int cnt=0;
    memset(f,0,sizeof(f));
    forup(i,1,n-2)
    {
          if (B[i]) ++cnt;
          if (!B[i+1])
          {
              ans^=sg[cnt];
              cnt=0;
              f[i][0]=ans;
          }
          else f[i][0]=ans^sg[max(0,cnt-1)];
    }
    cnt=0;ans=0;
    fordown(i,n-2,1)
    {
          if (B[i]) ++cnt;
          if (!B[i-1])
          {
              ans^=sg[cnt];
              cnt=0;
              f[i][1]=ans;
          }
          else f[i][1]=ans^sg[max(0,cnt-1)];
    }
    if (!ans) printf("Second\n");
    else
    {
        printf("First\n");
        forup(i,1,n-2)
           if (B[i] && !(f[i-1][0]^f[i+1][1]))
           {
              printf("%d\n",i+1);
              return 0;
           }
    }
}


#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <cmath>
#include <iostream>
#include <algorithm>
#define forup(i,a,b) for (int i=a;i<=b;i++)
#define fordown(i,a,b) for (int i=a;i>=b;--i)

using namespace std;

int sg[5001],n,f[5001][2];
char s1[5001];
bool b[5001],B[5001];

int main(){
    //freopen("1.txt","r",stdin);
    //freopen("2.txt","w",stdout);
    scanf("%s",s1);
    n=strlen(s1);
    memset(sg,0,sizeof(sg));
    forup(i,1,5000)
    {
         memset(b,false,sizeof(b));
         forup(j,0,i-1)
            if (j>i-j-1) break;
            else b[ sg[j]^sg[i-j-1] ]=true;
         forup(j,0,5000)
            if (!b[j])
            {
               sg[i]=j;
               break;
            }
    }
    int ans=0;
    memset(B,false,sizeof(B));
    forup(i,1,n-2)
        if (s1[i-1]==s1[i+1]) B[i]=true;
    int cnt=0;
    memset(f,0,sizeof(f));
    forup(i,1,n-2)
    {
          if (B[i]) ++cnt;
          if (!B[i+1])
          {
              ans^=sg[cnt];
              cnt=0;
              f[i][0]=ans;
          }
          else f[i][0]=ans^sg[max(0,cnt-1)];
    }
    cnt=0;ans=0;
    fordown(i,n-2,1)
    {
          if (B[i]) ++cnt;
          if (!B[i-1])
          {
              ans^=sg[cnt];
              cnt=0;
              f[i][1]=ans;
          }
          else f[i][1]=ans^sg[max(0,cnt-1)];
    }
    if (!ans) printf("Second\n");
    else
    {
        printf("First\n");
        forup(i,1,n-2)
           if (B[i] && !(f[i-1][0]^f[i+1][1]))
           {
              printf("%d\n",i+1);
              return 0;
           }
    }
}


#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <cmath>
#include <iostream>
#include <algorithm>
#define forup(i,a,b) for (int i=a;i<=b;i++)
#define fordown(i,a,b) for (int i=a;i>=b;--i)

using namespace std;

int sg[5001],n,f[5001][2];
char s1[5001];
bool b[5001],B[5001];

int main(){
   // freopen("1.txt","r",stdin);
   // freopen("2.txt","w",stdout);
    scanf("%s",s1);
    n=strlen(s1);
    memset(sg,0,sizeof(sg));
    sg[1]=1;
    forup(i,2,5000)
    {
         memset(b,false,sizeof(b));
         forup(j,1,i-2)
            if (j>i-j-1) break;
            else b[ sg[j]^sg[i-j-1] ]=true;
         forup(j,0,5000)
            if (!b[j])
            {
               sg[i]=j;
               break;
            }
    }
    int ans=0;
    memset(B,false,sizeof(B));
    forup(i,1,n-2)
        if (s1[i-1]==s1[i+1]) B[i]=true;
    int cnt=0;
    memset(f,0,sizeof(f));
    forup(i,1,n-2)
    {
          if (B[i]) ++cnt;
          if (!B[i+1])
          {
              ans^=sg[cnt];
              cnt=0;
          }
          f[i][0]=ans;
    }
    cnt=0;ans=0;
    fordown(i,n-2,1)
    {
          if (B[i]) ++cnt;
          if (!B[i-1])
          {
              ans^=sg[cnt];
              cnt=0;
          }
          f[i][1]=ans;
    }
    if (!ans) printf("Second\n");
    else
    {
        printf("First\n");
        forup(i,1,n-2)
           if (B[i] && !(f[i-1][0]^f[i+1][1]))
           {
              printf("%d\n",i+1);
              return 0;
           }
    }
}


#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;

int n,col;
int f[5010],used[5010];
char a[5010];

bool check(int i)
{int j,s=0,ret=0;

 for(j=2;j<i-1;j++)
 	if(a[j-1]==a[j+1])
 		s++;
 	else
	{	ret^=f[s];
		s=0;
	}
 ret^=f[s];
 s=0;
 for(j=i+2;j<n;j++)
 	if(a[j-1]==a[j+1])
	 	s++;
	else
	{	ret^=f[s];
		s=0;
	}
 ret^=f[s];
 return ret==0;
}

int main()
{int i,j,l,r;

 scanf("%s",a+1);
 n=strlen(a+1);
 f[0]=0;
 for(i=1;i<=n;i++)
 {	col++;
 	for(j=1;j<=n;j++)
	{	l=max(l-2,0);
		r=max(n-j-1,0);
		used[f[l]^f[r]]=col;
	}
	for(j=0;j<=n;j++)
		if(used[j]!=col)
		{	f[i]=j;
			break;
 		}
 }
 for(i=2;i<=n;i++)
 	if(a[i-1]==a[i+1] && check(i))
 	{	printf("First\n");
 		printf("%d\n",i);
 		return 0;
 	}
 printf("Second\n");
 return 0;
}


#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;

int n,col;
int f[5010],used[10010];
char a[5010];

int check(int i)
{int j,s=0,ret=0;

 for(j=2;j<i-1;j++)
 	if(a[j-1]==a[j+1])
 		s++;
 	else
	{	ret^=f[s];
		s=0;
	}
 ret^=f[s];
 s=0;
 for(j=i+2;j<n;j++)
 	if(a[j-1]==a[j+1])
	 	s++;
	else
	{	ret^=f[s];
		s=0;
	}
 ret^=f[s];
 return ret==0;
}

int main()
{int i,j,l,r;

 scanf("%s",a+1);
 n=strlen(a+1);
 f[0]=0;
 for(i=1;i<=n;i++)
 {	col++;
 	for(j=1;j<=i;j++)
	{	l=max(j-2,0);
		r=max(i-j-1,0);
		used[f[l]^f[r]]=col;
	}
	for(j=0;j<=n;j++)
		if(used[j]!=col)
		{	f[i]=j;
			break;
 		}
 }
 for(i=2;i<n;i++)
 	if(a[i-1]==a[i+1] && check(i))
 	{	printf("First\n");
 		printf("%d\n",i);
 		return 0;
 	}
 printf("Second\n");
 return 0;
}


#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;

int n,col;
int f[5010],used[5010];
char a[5010];

int check(int i)
{int j,s=0,ret=0;

 for(j=2;j<i-1;j++)
 	if(a[j-1]==a[j+1])
 		s++;
 	else
	{	ret^=f[s];
		s=0;
	}
 ret^=f[s];
 s=0;
 for(j=i+2;j<n;j++)
 	if(a[j-1]==a[j+1])
	 	s++;
	else
	{	ret^=f[s];
		s=0;
	}
 ret^=f[s];
 return ret==0;
}

int main()
{int i,j,l,r;

 scanf("%s",a+1);
 n=strlen(a+1);
 f[0]=0;
 for(i=1;i<=n;i++)
 {	col++;
 	for(j=1;j<=n;j++)
	{	l=max(l-2,0);
		r=max(n-j-1,0);
		used[f[l]^f[r]]=col;
	}
	for(j=0;j<=n;j++)
		if(used[j]!=col)
		{	f[i]=j;
			break;
 		}
 }
 for(i=2;i<=n;i++)
 	if(a[i-1]==a[i+1] && check(i))
 	{	printf("First\n");
 		printf("%d\n",i);
 		return 0;
 	}
 printf("Second\n");
 return 0;
}


#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;

int n,col;
int f[5010],used[5010];
char a[5010];

int check(int i)
{int j,s=0,ret=0;

 for(j=2;j<i-1;j++)
 	if(a[j-1]==a[j+1])
 		s++;
 	else
	{	ret^=f[s];
		s=0;
	}
 ret^=f[s];
 s=0;
 for(j=i+2;j<n;j++)
 	if(a[j-1]==a[j+1])
	 	s++;
	else
	{	ret^=f[s];
		s=0;
	}
 ret^=f[s];
 return ret==0;
}

int main()
{int i,j,l,r;

 scanf("%s",a+1);
 n=strlen(a+1);
 f[0]=0;
 for(i=1;i<=n;i++)
 {	col++;
 	for(j=1;j<=i;j++)
	{	l=max(j-2,0);
		r=max(n-j-1,0);
		used[f[l]^f[r]]=col;
	}
	for(j=0;j<=n;j++)
		if(used[j]!=col)
		{	f[i]=j;
			break;
 		}
 }
 for(i=2;i<=n;i++)
 	if(a[i-1]==a[i+1] && check(i))
 	{	printf("First\n");
 		printf("%d\n",i);
 		return 0;
 	}
 printf("Second\n");
 return 0;
}


#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;

int n,col;
int f[5010],used[10010];
char a[5010];

int check(int i)
{int j,s=0,ret=0;

 for(j=2;j<i-1;j++)
 	if(a[j-1]==a[j+1])
 		s++;
 	else
	{	ret^=f[s];
		s=0;
	}
 ret^=f[s];
 s=0;
 for(j=i+2;j<n;j++)
 	if(a[j-1]==a[j+1])
	 	s++;
	else
	{	ret^=f[s];
		s=0;
	}
 ret^=f[s];
 return ret==0;
}

int main()
{int i,j,l,r;

 scanf("%s",a+1);
 n=strlen(a+1);
 f[0]=0;
 for(i=1;i<=n;i++)
 {	col++;
 	for(j=1;j<=i;j++)
	{	l=max(j-2,0);
		r=max(n-j-1,0);
		used[f[l]^f[r]]=col;
	}
	for(j=0;j<=n;j++)
		if(used[j]!=col)
		{	f[i]=j;
			break;
 		}
 }
 for(i=2;i<n;i++)
 	if(a[i-1]==a[i+1] && check(i))
 	{	printf("First\n");
 		printf("%d\n",i);
 		return 0;
 	}
 printf("Second\n");
 return 0;
}


#include <bits/stdc++.h>

using namespace std;

#define x first
#define y second
#define mp make_pair
#define pb push_back
#define sqr(a) ((a) * (a))
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define forn(i, n) for(int i = 0; i < int(n); i++)
#define fore(i, l, r) for(int i = int(l); i < int(r); i++)

typedef long long li;
typedef long double ld;
typedef pair<int, int> pt;

template <class A, class B> ostream& operator << (ostream& out, const pair<A, B> &a) {
	return out << "(" << a.x << ", " << a.y << ")";
}

template <class A> ostream& operator << (ostream& out, const vector<A> &v) {
	out << "[";
	forn(i, sz(v)) {
		if(i) out << ", ";
		out << v[i];
	}
	return out << "]";
}

mt19937 rnd(time(NULL));

const int INF = int(1e9);
const li INF64 = li(1e18);
const int MOD = INF + 7;
const ld EPS = 1e-9;
const ld PI = acos(-1.0);

const int N = 5000 + 7;

int n;
string s;

bool read () {
	static char buf[N];
	if (scanf("%s", buf) != 1)
		return false;
	s = buf;
	n = sz(s);
	return true;
}

int dp[N];
set<int> mex;

int calc(int len){
	len = max(len, 0);
	if (dp[len] != -1)
		return dp[len];
	vector<int> vals;
	forn(i, len)
		vals.pb(calc(i - 1) ^ calc(len - i - 2));
	sort(all(vals));
	vals.resize(unique(all(vals)) - vals.begin());
	for (auto it : vals)
		mex.erase(it);
	dp[len] = *mex.begin();
	for (auto it : vals)
		mex.insert(it);
	return dp[len];
}

void solve() {
	memset(dp, -1, sizeof(dp));
	forn(i, N) mex.insert(i);

	int ans = 0;
	fore(i, 1, n - 1){
		if (s[i - 1] != s[i + 1]) continue;
		int j = i;
		while (j + 1 < n - 1 && s[j] == s[j + 2]) ++j;
		ans ^= calc(j - i + 1);
		i = j;
	}

	if (ans == 0){
		puts("Second");
		return;
	}

	fore(i, 1, n - 1){
		if (s[i - 1] != s[i + 1]) continue;
		int j = i;
		while (j + 1 < n - 1 && s[j] == s[j + 2]) ++j;
		int len = j - i + 1;
		int cur = ans ^ calc(len);
		forn(k, len) if ((calc(k - 1) ^ calc(len - k - 2) ^ cur) == 0){
			printf("First\n%d\n", i + k + 1);
			return;
		}
		i = j;
	}

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

int main() {
#ifdef _DEBUG
	freopen("input.txt", "r", stdin);
//	freopen("output.txt", "w", stdout);

	int tt = clock();

#endif

	cerr.precision(15);
	cout.precision(15);
	cerr << fixed;
	cout << fixed;

#ifdef _DEBUG
	while(read()) {
#else
	if(read()) {
#endif
		solve();

#ifdef _DEBUG
	cerr << "TIME = " << clock() - tt << endl;
	tt = clock();
#endif

	}
}


// @author peter50216
// #includes {{{
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<functional>
#include<math.h>
#include<assert.h>
#include<stdarg.h>
#include<time.h>
#include<limits.h>
#include<ctype.h>
#include<string>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
#include<vector>
#include<iostream>
#include<sstream>
using namespace std;
// }}}
// #defines {{{
#define FOR(i,c) for(__typeof((c).begin()) i=(c).begin();i!=(c).end();i++)
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<(n);i++)
#define REP1(i,a,b) for(int i=(a);i<=(b);i++)
#define REPL(i,x) for(int i=0;x[i];i++)
#define PER(i,n) for(int i=(n)-1;i>=0;i--)
#define PER1(i,a,b) for(int i=(a);i>=(b);i--)
#define RI(x) scanf("%d",&x)
#define DRI(x) int x;RI(x)
#define RII(x,y) scanf("%d%d",&x,&y)
#define DRII(x,y) int x,y;RII(x,y)
#define RIII(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define DRIII(x,y,z) int x,y,z;RIII(x,y,z)
#define RS(x) scanf("%s",x)
#define PI(x) printf("%d\n",x)
#define PIS(x) printf("%d ",x)
#define CASET int ___T,cas=1;scanf("%d ",&___T);while(___T--)
#define CASEN0(n) int cas=1;while(scanf("%d",&n)!=EOF&&n)
#define CASEN(n) int cas=1;while(scanf("%d",&n)!=EOF)
#define MP make_pair
#define PB push_back
#define MS0(x) memset(x,0,sizeof(x))
#define MS1(x) memset(x,-1,sizeof(x))
#define SEP(x) ((x)?'\n':' ')
#define F first
#define S second
#ifdef ONLINE_JUDGE
#define FILEIO(x) freopen(#x ".in","r",stdin);freopen(#x ".out","w",stdout);
#define FILEIOS freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
#else
#define FILEIO(x) ;
#define FILEIOS ;
#endif
typedef pair<int,int> PII;
typedef long long LL;
typedef unsigned long long ULL;
// }}}

char in[5050];
int pc[5050],pp[5050];
int allc[5050];
int nn[5050];
int vis[5050],visid;
inline int nim(int a){
    return nn[a];
}
int main(){
    nn[0]=0;
    nn[1]=1;
    nn[2]=1;
    REP1(a,3,5000){
        visid++;
        vis[nn[a-2]]=visid;
        vis[nn[a-3]]=visid;
        REP1(i,1,a){
            if(a-3-i<i)break;
            vis[nn[a-3-i]^nn[i]]=visid;
        }
        while(vis[nn[a]]==visid)nn[a]++;
    }
    RS(in);
    int n=strlen(in);
    int ans=0;
    int cnt=0,cc=0;
    REP1(i,1,n-1){
        if(i<n-1&&in[i-1]==in[i+1]){
            cnt++;
            pc[i]=cc;
            pp[i]=cnt;
        }else{
            ans^=nim(cnt);
            allc[cc++]=cnt;
            cnt=0;
        }
    }
    puts(ans?"First":"Second");
    if(ans){
        REP1(i,1,n-2){
            if(in[i-1]==in[i+1]){
                int aa=ans^nim(allc[pc[i]]);
                if(pp[i]>2)aa^=nim(pp[i]-2);
                if(pp[i]<=allc[pc[i]]-2)aa^=nim(allc[pc[i]]-1-pp[i]);
                if(aa==0){
                    PI(i+1);
                    return 0;
                }
            }
        }
    }
}


#pragma warning(disable : 4996)

#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <algorithm>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <queue>
#include <climits>
#include <stack>
#include <set>
#include <cstring>
#include <map>
#include <cassert>
#include <bitset>
#include <chrono>
#include <fstream>
#include <ctime>

using namespace std;

#define DINF (1. / 0.)
#define INF (int)1e9
#define LINF (long long)1e16

typedef long double ldouble;

long long __gcd(long long a, long long b)
{
	while (a != 0)
	{
		long long __t = b % a;
		b = a;
		a = __t;
	}
	return b;
}

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

    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);

	string s; cin >> s;
	unsigned N = s.size();

	vector<int> gr(N);

	for (int i = 1; i < N; i++)
	{
		set<int> mex;

		for (int j = 0; j < i; j++)
		{
			int l = max(j - 1, 0);
			int r = max(j - i - 2, 0);

			mex.insert(gr[l] ^ gr[r]);
		}

		unsigned c = 0;
		for (auto it = mex.begin(); it != mex.end(); ++it, ++c)
			if (*it != c)
				break;
		gr[i] = c;
	}

	int ans = 0;
	for (int i = 1; i + 1 < N; i++)
	{
		if (s[i - 1] == s[i + 1])
		{
			int j = i;
			while (j + 2 < N && s[j] == s[j + 2]) j++;
			ans ^= gr[j - i + 1];
			i = j + 1;
		}
	}

	if (!ans)
	{
		cout << "Second"; return 0;
	}

	cout << "First\n";
	for (int i = 1; i + 1 < N; i++)
	{
		if (s[i - 1] == s[i + 1])
		{
			int j = i;
			while (j + 2 < N && s[j] == s[j + 2]) j++;

			int len = j - i + 1;
			int xr = ans ^ gr[len];

			for (int k = 0; k < len; k++)
			{
				int left = max(0, k - 1);
				int right = max(0, len - k - 2);

				if (!(xr ^ gr[left] ^ gr[right]))
				{
					cout << i + k + 1;
					return 0;
				}
			}

			i = j + 1;
		}
	}

    return 0;
}


#pragma warning(disable : 4996)

#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <algorithm>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <queue>
#include <climits>
#include <stack>
#include <set>
#include <cstring>
#include <map>
#include <cassert>
#include <bitset>
#include <chrono>
#include <fstream>
#include <ctime>

using namespace std;

#define DINF (1. / 0.)
#define INF (int)1e9
#define LINF (long long)1e16

typedef long double ldouble;

long long __gcd(long long a, long long b)
{
	while (a != 0)
	{
		long long __t = b % a;
		b = a;
		a = __t;
	}
	return b;
}

const unsigned MAXN = 5005;
int gr[MAXN];

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

    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);

	string s; cin >> s;
	unsigned N = s.size();

	for (int i = 1; i < N; i++)
	{
		set<int> mex;

		for (int j = 0; j < i; j++)
		{
			int l = max(j - 1, 0);
			int r = max(i - j - 2, 0);

			mex.insert(gr[l] ^ gr[r]);
		}

		unsigned c = 0;
		for (auto it = mex.begin(); it != mex.end(); ++it, ++c)
			if (*it != c)
				break;
		gr[i] = c;
	}

	int ans = 0;
	for (int i = 1; i + 1 < N; i++)
	{
		if (s[i - 1] == s[i + 1])
		{
			int j = i;
			while (j + 2 < N && s[j] == s[j + 2]) j++;
			ans ^= gr[j - i + 1];
			i = j + 1;
		}
	}

	if (!ans)
	{
		cout << "Second"; return 0;
	}

	cout << "First\n";
	for (int i = 1; i + 1 < N; i++)
	{
		if (s[i - 1] == s[i + 1])
		{
			int j = i;
			while (j + 2 < N && s[j] == s[j + 2]) j++;

			int len = j - i + 1;
			int xr = ans ^ gr[len];

			for (int k = 0; k < len; k++)
			{
				int left = max(0, k - 1);
				int right = max(0, len - k - 2);

				if (!(xr ^ gr[left] ^ gr[right]))
				{
					cout << i + k + 1;
					return 0;
				}
			}

			i = j + 1;
		}
	}

    return 0;
}


#include<bits/stdc++.h>
const int N = 5005;
using namespace std;

string s; int n, f[N], cnt, a[N];
bool ck[N];

void solve(int num){
    for (int i = 0; i < N; i++) ck[i] = 0;
    for (int i = 2; i <= num-1; i++){
        int x = max(i-3, 0), y = max(num-i-2, 0);
        ck[f[x]^f[y]] = 1;
    }
    for (int i = 0; i < N; i++)
        if (!ck[i]){
            f[num] = i; break;
        }
}

int cal(int l, int r){
    int cur = 0, cnt = 0;
    for (int i = l+1; i < r; i++){
        if (ck[i]){cnt++;}
        else {
            cur ^= cnt; cnt = 0;
        }
    }
    cur ^= cnt;
    return cur;
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    cin >> s; n = s.size(); s = '.' + s;
    for (int i = 1; i < N; i++) solve(i);
    for (int i = 2; i <  n; i++) if (s[i-1] == s[i+1]) ck[i] = 1; else ck[i] = 0;
    for (int i = 2; i <  n; i++){
        if (ck[i] && cal(1, i-1) ^ cal(i+1, n) == 0){
            cout << "First\n" << i;
            return 0;
        }
    }
    cout << "Second";
}


#include<bits/stdc++.h>
const int N = 5005;
using namespace std;

string s; int n, f[N], cnt, a[N];
bool ck[N];

void solve(int num){
    for (int i = 0; i < N; i++) ck[i] = 0;
    for (int i = 2; i <= num-1; i++){
        int x = max(i-3, 0), y = max(num-i-2, 0);
        ck[f[x]^f[y]] = 1;
    }
    for (int i = 0; i < N; i++)
        if (!ck[i]){
            f[num] = i; break;
        }
}

int cal(int l, int r){
    int cur = 0, cnt = 0;
    for (int i = l+1; i < r; i++){
        if (ck[i]){cnt++;}
        else {
            cur ^= cnt; cnt = 0;
        }
    }
    return cur;
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    cin >> s; n = s.size(); s = '.' + s;
    for (int i = 1; i < N; i++) solve(i);
    for (int i = 2; i <  n; i++) if (s[i-1] == s[i+1]) ck[i] = 1; else ck[i] = 0;
    for (int i = 2; i <  n; i++){
        if (ck[i] && cal(1, i-1) ^ cal(i+1, n) == 0){
            cout << "First\n" << i;
            return 0;
        }
    }
    cout << "Second";
}


#include<bits/stdc++.h>
const int N = 5005;
using namespace std;

string s; int n, f[N], cnt, a[N];
bool ck[N];

void solve(int num){
    for (int i = 0; i < N; i++) ck[i] = 0;
    for (int i = 2; i <= num-1; i++){
        int x = max(i-3, 0), y = max(num-i-2, 0);
        ck[f[x]^f[y]] = 1;
    }
    for (int i = 0; i < N; i++){
        if (!ck[i]){
            f[num] = i; break;
        }
    }
}

int cal(int l, int r){
    int cur = 0, cnt = 0;
    for (int i = l+1; i < r; i++){
        if (ck[i]){cnt++;}
        else {
            cur ^= f[cnt]; cnt = 0;
        }
    }
    cur ^= f[cnt];
    return cur;
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    cin >> s; n = s.size(); s = '.' + s;
    for (int i = 1; i < N; i++) solve(i);
    for (int i = 2; i <  n; i++) if (s[i-1] == s[i+1]) ck[i] = 1; else ck[i] = 0;
    for (int i = 2; i <  n; i++){
        if (ck[i] && cal(1, i-1) ^ cal(i+1, n) == 0){
            cout << "First\n" << i;
            return 0;
        }
    }
    cout << "Second";
}


#include<bits/stdc++.h>
const int N = 5005;
using namespace std;

string s; int n, f[N], cnt, a[N];
bool ck[N];

void solve(int num){
    for (int i = 0; i < N; i++) ck[i] = 0;
    for (int i = 2; i <=  num+1; i++){
        int x = max(i-3, 0), y = max(num-i, 0);
        ck[f[x]^f[y]] = 1;
    }
    for (int i = 0; i < N; i++){
        if (!ck[i]){
            f[num] = i; break;
        }
    }
}

int cal(int l, int r){
    int cur = 0, cnt = 0;
    for (int i = l+1; i < r; i++){
        if (ck[i]){cnt++;}
        else cur ^= f[cnt], cnt = 0;
    }
    cur ^= f[cnt];
    return cur;
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    cin >> s; n = s.size(); s = '.' + s;
    for (int i = 1; i < N; i++) solve(i);
    for (int i = 2; i <  n; i++) if (s[i-1] == s[i+1]) ck[i] = 1; else ck[i] = 0;
    for (int i = 2; i <  n; i++){
        if (ck[i] && (cal(1, i-1) ^ cal(i+1, n)) == 0){
            cout << "First\n" << i;
            return 0;
        }
    }
    cout << "Second";
}


#include<bits/stdc++.h>
const int N = 5005;
using namespace std;

string s; int n, f[N], cnt, a[N];
bool ck[N];

void solve(int num){
    for (int i = 0; i < N; i++) ck[i] = 0;
    for (int i = 2; i <=  num+1; i++){
        int x = max(i-3, 0), y = max(num-i-2, 0);
        ck[f[x]^f[y]] = 1;
    }
    for (int i = 0; i < N; i++){
        if (!ck[i]){
            f[num] = i; break;
        }
    }
}

int cal(int l, int r){
    int cur = 0, cnt = 0;
    for (int i = l+1; i < r; i++){
        if (ck[i]){cnt++;}
        else cur ^= f[cnt], cnt = 0;
    }
    cur ^= f[cnt];
    return cur;
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    cin >> s; n = s.size(); s = '.' + s;
    for (int i = 1; i < N; i++) solve(i);
    for (int i = 2; i <  n; i++) if (s[i-1] == s[i+1]) ck[i] = 1; else ck[i] = 0;
    for (int i = 2; i <  n; i++){
        if (ck[i] && (cal(1, i-1) ^ cal(i+1, n)) == 0){
            cout << "First\n" << i;
            return 0;
        }
    }
    cout << "Second";
}


#include <bits/stdc++.h>
#ifdef DEMETRIO
#define deb(...) fprintf(stderr,__VA_ARGS__)
#define deb1(x) cerr << #x << " = " << x << endl
#else
#define deb(...) 0
#define deb1(x) 0
#endif
#define pb push_back
#define mp make_pair
#define fst first
#define snd second
#define fore(i,a,b) for(int i=a,ThxDem=b;i<ThxDem;++i)
#define SZ(x) ((int)x.size())
using namespace std;
typedef long long ll;

char s[5005];int n;
int f[5005];
vector<pair<int,int> > w;

int main(){
	scanf("%s",s);n=strlen(s);
	f[0]=0;
	fore(i,1,5005){
		set<int> w;
		fore(j,0,i)w.insert(f[max(j-1,0)]^f[max(i-2-j,0)]);
		f[i]=0;
		while(w.count(f[i]))f[i]++;
	}
	int r=0;
	for(int i=1;i<n-1;){
		if(s[i-1]!=s[i+1]){i++;continue;}
		int j=i;
		while(j<n-1&&s[j-1]==s[j+1])j++;
		w.pb(mp(i,j));
		r^=f[j-i];
		i=j;
	}
	puts(r?"First":"Second");
	if(r){
		for(auto p:w){
			int i=p.snd-p.fst;
			fore(j,0,i)if(!(f[max(j-1,0)]^f[max(i-2-j,0)]^r^f[i])){
				printf("%d\n",p.fst+j+1);
				return 0;
			}
		}
		assert(0);
	}
	return 0;
}


#include <bits/stdc++.h>
using namespace std;
char s[5010];
int sg[5010];
vector<pair<int, int>> cut;

int getSg(int x){
    if(sg[x] != -1)return sg[x];
    vector<int> res;
    for(int i=0;i<x;i++){
        res.push_back(getSg(i) ^ getSg(x - i - 1));
    }
    sort(res.begin(), res.end());
    res.resize(unique(res.begin(), res.end()) - res.begin());
    int ans = 0;
    for(int y : res){
        if(ans == y)ans++;
        else break;
    }
    return sg[x] = ans;
}

int main(){
    scanf("%s", s);
    int len = strlen(s), l = -1, sz = 0;
    for(int i=1;i<len-1;i++){
        if(s[i - 1] == s[i + 1]){
            if(l == -1){
                l = i, sz = 1;
            }else{
                sz++;
            }
        }else{
            if(l != -1){
                cut.push_back({l, sz});
                l = -1, sz = 0;
            }
        }
    }
    if(l != -1){
        cut.push_back({l, sz});
    }
    memset(sg, -1, sizeof(sg));
    sg[0] = 0;
    int ans = 0;
    for(auto c : cut){
        ans ^= getSg(c.second);
    }
    if(ans){
        puts("First");
        for(auto c : cut){
            for(int i=0;i<c.second;i++){
                if(ans ^ getSg(i) ^ getSg(c.second - i - 1) ^ getSg(c.second) == 0){
                    printf("%d\n", c.first + i + 1);
                    return 0;
                }
            }
        }
    }else{
        puts("Second");
    }

    return 0;
}


#include <bits/stdc++.h>
using namespace std;
char s[5010];
int sg[5010];
vector<pair<int, int>> cut;

int getSg(int x){
    if(x < 0)return 0;
    if(sg[x] != -1)return sg[x];
    vector<int> res;
    for(int i=0;i<x;i++){
        res.push_back(getSg(i - 1) ^ getSg(x - i - 1 - 1));
    }
    sort(res.begin(), res.end());
    res.resize(unique(res.begin(), res.end()) - res.begin());
    int ans = 0;
    for(int y : res){
        if(ans == y)ans++;
        else break;
    }
    return sg[x] = ans;
}

int main(){
    scanf("%s", s);
    int len = strlen(s), l = -1, sz = 0;
    for(int i=1;i<len-1;i++){
        if(s[i - 1] == s[i + 1]){
            if(l == -1){
                l = i, sz = 1;
            }else{
                sz++;
            }
        }else{
            if(l != -1){
                cut.push_back({l, sz});
                l = -1, sz = 0;
            }
        }
    }
    if(l != -1){
        cut.push_back({l, sz});
    }
    memset(sg, -1, sizeof(sg));
    sg[0] = 0;
    int ans = 0;
    for(auto c : cut){
        ans ^= getSg(c.second);
    }
    if(ans){
        puts("First");
        for(auto c : cut){
            for(int i=0;i<c.second;i++){
                if((ans ^ getSg(i - 1) ^ getSg(c.second - i - 1 - 1) ^ getSg(c.second)) == 0){
                    printf("%d\n", c.first + i + 1);
                    return 0;
                }
            }
        }
    }else{
        puts("Second");
    }

    return 0;
}


#include <bits/stdc++.h>
using namespace std;
char s[5010];
int sg[5010];
vector<pair<int, int>> cut;

int getSg(int x){
    if(x < 0)return 0;
    if(sg[x] != -1)return sg[x];
    vector<int> res;
    for(int i=0;i<x;i++){
        res.push_back(getSg(i - 1) ^ getSg(x - i - 1 - 1));
    }
    sort(res.begin(), res.end());
    res.resize(unique(res.begin(), res.end()) - res.begin());
    int ans = 0;
    for(int y : res){
        if(ans == y)ans++;
        else break;
    }
    return sg[x] = ans;
}

int main(){
    scanf("%s", s);
    int len = strlen(s), l = -1, sz = 0;
    for(int i=1;i<len-1;i++){
        if(s[i - 1] == s[i + 1]){
            if(l == -1){
                l = i, sz = 1;
            }else{
                sz++;
            }
        }else{
            if(l != -1){
                cut.push_back({l, sz});
                l = -1, sz = 0;
            }
        }
    }
    if(l != -1){
        cut.push_back({l, sz});
    }
    memset(sg, -1, sizeof(sg));
    sg[0] = 0;
    int ans = 0;
    for(auto c : cut){
        ans ^= getSg(c.second);
    }
    if(ans){
        puts("First");
        for(auto c : cut){
            for(int i=0;i<c.second;i++){
                if((ans ^ getSg(i - 1) ^ getSg(c.second - i - 1 - 1) ^ getSg(c.second)) == 0){
                    printf("%d\n", c.first + i + 1);
                    return 0;
                }
            }
        }
    }else{
        puts("Second");;;;
    }

    return 0;
}


#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

int main() {
    string s; cin >> s;
    int n = s.length();
    vector<bool> same(n);
    for (int i = 1; i + 1 < n; i++) same[i] = s[i - 1] == s[i + 1];
    vector<int> grundy(n);
    for (int i = 0; i < n; i++) {
        vector<bool> mex(n);
        for (int j = 0; j < i; j++) {
            int l = j - 1, r = i - 1 - (j + 1);
            mex[grundy[max(0, l)] ^ grundy[max(0, r)]] = true;
        }
        int g = 0;
        while (mex[g]) g++;
        grundy[i] = g;
    }
    auto calc = [&](int p) {
        int nim = 0, len = 0;
        for (int i = 0; i < n; i++) {
            if (same[i] && abs(i - p) > 1) len++;
            else nim ^= grundy[len], len = 0;
        }
        return nim;
    };
    for (int i = 0; i < n; i++) if (same[i] && calc(i) == 0) {
        return !(cout << "First" << endl << i + 1 << endl);
    }
    cout << "Second" << endl;
    return 0;
}


#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp> // Common file
//#include <ext/pb_ds/tree_policy.hpp> // Including seg_tree_order_statistics_node_update
#include <stdio.h>
#include <cassert>
using namespace std;
//using namespace __gnu_pbds;
typedef int lo;
typedef long double ld;
typedef pair<lo,lo> ll;//pair
typedef vector<lo> vl;  //vector of long
typedef vector<ll > vll;   //vector of pair
typedef priority_queue<lo>p_q;
typedef vector< vl > vvl;  //vector of vectors
#define X first
#define Y second
#define mp(a,b) make_pair((a),(b))
#define REP(a,b) for(lo i=(a);i<(lo)b;i++)//no need to declare variable i
#define REPE(a,b,c,d) REP(a,b)for(lo j=(c);j<(lo)d;j++)//no need to declare vaiables i,j
#define REPV(a,b,c) for(lo(a)=b;(a)<(c);(a)++)//a is the variable
#define IREP(a,b) for(lo i=(a);i>=(b);i--)
#define IREPV(a,b,c) for(lo(a)=b;(a)>=(c);(a)--)
#define all(v) (v).begin(),(v).end()
#define TRV(a) for(auto &it : a)
#define INF 5003
#define MOD 1000000007
#define M 1000000007
#define BLOCK 300
#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
#define pb(a) push_back((a))
#define eps 1e-8
#define PI 3.141592653589793
#define debug(x) cout<<#x<<"="<<x<<endl
#define debug2(x,y) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<endl;
#define debug3(x,y,z) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl;
#define debug4(x,y,z,w) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<" "<<#w<<"="<<w<<endl;
#define debug5(x,y,z,w,t) cout<<#x<<"="<<x <<" ";debug4(y,z,w,t);
#define debug6(p,x,y,z,w,t) cout<<#p<<" "<<p<<" "<<#x<<"="<<x <<" ";debug4(y,z,w,t);
#define print_matrix(a,n,m) REPE(0,n,0,m){cout<<(a)[i][j]<<((j==m-1)?'\n':' ');}
#define endl "\n"
template<typename T> ostream& operator<< ( ostream &o,vector<T> v ) {
    if ( v.size() >0 )o<<v[0];
    for ( unsigned   i=1; i<v.size(); i++ )o<<" "<<v[i];
    return o<<endl;
}
template<typename U,typename V> ostream& operator<< ( ostream &o,pair<U,V> p ) {
    return o<<"("<<p.first<<", "<<p.second<<") ";
}
template<typename T> istream& operator>> ( istream &in,vector<T> &v ) {
    for ( unsigned   i=0; i<v.size(); i++ )in>>v[i];
    return in;
}
template<typename T> istream& operator>> ( istream &in,pair <T,T> &p ) {
    in>>p.X;
    in>>p.Y;
    return in;
}
vl G(INF,0);
string a;
bool check(){
    lo ans=0;//debug(a);
    REP(1,a.length()-1){
        lo add=0;
        while(a[i-1]==a[i+1] and i+1<a.length() and a[i]!='$' and a[i+1]!='$')add++,i++;
        //if(add)debug2(i,add);
        ans^=G[add];
    }
    return ans==0;
}
int main(){
    std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);cout.precision(20);
    G[0]=0;
    G[1]=1;
    REP(2,INF){
        set<lo>temp;
        REPV(j,0,i){
            if(j==0 or j==i-1)temp.insert(1);
            else temp.insert(G[j-1]^G[i-j-2]);
        }
        while(temp.find(G[i])!=temp.end())G[i]++;
    }
    cin>>a;
    a+="$";
    REP(1,a.length()-1)if(a[i-1]==a[i+1]){
        char c=a[i];
        //debug(i);
        a[i]='$';
        if(check()){
            cout<<"First"<<endl;
            cout<<i+1<<endl;
            return 0;
        }
        a[i]=c;
    }
    cout<<"Second";
    return 0;
}


#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp> // Common file
//#include <ext/pb_ds/tree_policy.hpp> // Including seg_tree_order_statistics_node_update
#include <stdio.h>
#include <cassert>
using namespace std;
//using namespace __gnu_pbds;
typedef int lo;
typedef long double ld;
typedef pair<lo,lo> ll;//pair
typedef vector<lo> vl;  //vector of long
typedef vector<ll > vll;   //vector of pair
typedef priority_queue<lo>p_q;
typedef vector< vl > vvl;  //vector of vectors
#define X first
#define Y second
#define mp(a,b) make_pair((a),(b))
#define REP(a,b) for(lo i=(a);i<(lo)b;i++)//no need to declare variable i
#define REPE(a,b,c,d) REP(a,b)for(lo j=(c);j<(lo)d;j++)//no need to declare vaiables i,j
#define REPV(a,b,c) for(lo(a)=b;(a)<(c);(a)++)//a is the variable
#define IREP(a,b) for(lo i=(a);i>=(b);i--)
#define IREPV(a,b,c) for(lo(a)=b;(a)>=(c);(a)--)
#define all(v) (v).begin(),(v).end()
#define TRV(a) for(auto &it : a)
#define INF 5003
#define MOD 1000000007
#define M 1000000007
#define BLOCK 300
#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
#define pb(a) push_back((a))
#define eps 1e-8
#define PI 3.141592653589793
#define debug(x) cout<<#x<<"="<<x<<endl
#define debug2(x,y) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<endl;
#define debug3(x,y,z) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl;
#define debug4(x,y,z,w) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<" "<<#w<<"="<<w<<endl;
#define debug5(x,y,z,w,t) cout<<#x<<"="<<x <<" ";debug4(y,z,w,t);
#define debug6(p,x,y,z,w,t) cout<<#p<<" "<<p<<" "<<#x<<"="<<x <<" ";debug4(y,z,w,t);
#define print_matrix(a,n,m) REPE(0,n,0,m){cout<<(a)[i][j]<<((j==m-1)?'\n':' ');}
#define endl "\n"
template<typename T> ostream& operator<< ( ostream &o,vector<T> v ) {
    if ( v.size() >0 )o<<v[0];
    for ( unsigned   i=1; i<v.size(); i++ )o<<" "<<v[i];
    return o<<endl;
}
template<typename U,typename V> ostream& operator<< ( ostream &o,pair<U,V> p ) {
    return o<<"("<<p.first<<", "<<p.second<<") ";
}
template<typename T> istream& operator>> ( istream &in,vector<T> &v ) {
    for ( unsigned   i=0; i<v.size(); i++ )in>>v[i];
    return in;
}
template<typename T> istream& operator>> ( istream &in,pair <T,T> &p ) {
    in>>p.X;
    in>>p.Y;
    return in;
}
vvl dp(INF,vl (INF,-1));
string a;
void fun(lo l,lo r){
    if(r<l+2){
        dp[l][r]=0;
        return ;
    }
    lo ans=0;
    set<lo>temp;
    REP(l,r-1){
        lo x=-1;
        if(a[i]==a[i+2]){
            x=0;
            if(dp[l][i]==-1)fun(l,i);
            if(dp[i+2][r]==-1)fun(i+2,r);
            x^=dp[l][i];
            x^=dp[i+2][r];
        }
        if(x!=-1)temp.insert(x);
    }
    while(temp.find(ans)!=temp.end())ans++;
    dp[l][r]=ans;
}
int main(){
    std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);cout.precision(20);
    cin>>a;
    REP(0,INF)dp[i][i]=0;
    fun(0,a.length()-1);
    if(dp[0][a.length()-1]==0){
        cout<<"Second";
        return 0;
    }
    cout<<"First"<<endl;
    REP(1,a.length()-1){
        if(dp[0][i-1]^dp[i+1][a.length()-1]==0 and a[i-1]==a[i+1]){
            cout<<i+1;
            return 0;
        }
    }
    return 0;
}


#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp> // Common file
//#include <ext/pb_ds/tree_policy.hpp> // Including seg_tree_order_statistics_node_update
#include <stdio.h>
#include <cassert>
using namespace std;
//using namespace __gnu_pbds;
typedef int lo;
typedef long double ld;
typedef pair<lo,lo> ll;//pair
typedef vector<lo> vl;  //vector of long
typedef vector<ll > vll;   //vector of pair
typedef priority_queue<lo>p_q;
typedef vector< vl > vvl;  //vector of vectors
#define X first
#define Y second
#define mp(a,b) make_pair((a),(b))
#define REP(a,b) for(lo i=(a);i<(lo)b;i++)//no need to declare variable i
#define REPE(a,b,c,d) REP(a,b)for(lo j=(c);j<(lo)d;j++)//no need to declare vaiables i,j
#define REPV(a,b,c) for(lo(a)=b;(a)<(c);(a)++)//a is the variable
#define IREP(a,b) for(lo i=(a);i>=(b);i--)
#define IREPV(a,b,c) for(lo(a)=b;(a)>=(c);(a)--)
#define all(v) (v).begin(),(v).end()
#define TRV(a) for(auto &it : a)
#define INF 5003
#define MOD 1000000007
#define M 1000000007
#define BLOCK 300
#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
#define pb(a) push_back((a))
#define eps 1e-8
#define PI 3.141592653589793
#define debug(x) cout<<#x<<"="<<x<<endl
#define debug2(x,y) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<endl;
#define debug3(x,y,z) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl;
#define debug4(x,y,z,w) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<" "<<#w<<"="<<w<<endl;
#define debug5(x,y,z,w,t) cout<<#x<<"="<<x <<" ";debug4(y,z,w,t);
#define debug6(p,x,y,z,w,t) cout<<#p<<" "<<p<<" "<<#x<<"="<<x <<" ";debug4(y,z,w,t);
#define print_matrix(a,n,m) REPE(0,n,0,m){cout<<(a)[i][j]<<((j==m-1)?'\n':' ');}
#define endl "\n"
template<typename T> ostream& operator<< ( ostream &o,vector<T> v ) {
    if ( v.size() >0 )o<<v[0];
    for ( unsigned   i=1; i<v.size(); i++ )o<<" "<<v[i];
    return o<<endl;
}
template<typename U,typename V> ostream& operator<< ( ostream &o,pair<U,V> p ) {
    return o<<"("<<p.first<<", "<<p.second<<") ";
}
template<typename T> istream& operator>> ( istream &in,vector<T> &v ) {
    for ( unsigned   i=0; i<v.size(); i++ )in>>v[i];
    return in;
}
template<typename T> istream& operator>> ( istream &in,pair <T,T> &p ) {
    in>>p.X;
    in>>p.Y;
    return in;
}
vl G(INF,0);
string a;
bool check(){
    lo ans=0;//debug(a);
    REP(1,a.length()){
        lo add=0;
        while(a[i-1]==a[i+1] and i+1<a.length() and a[i]!='$' and a[i+1]!='$')add++,i++;
        //if(add)debug2(i,add);
        ans^=G[add];
    }
    return ans==0;
}
int main(){
    std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);cout.precision(20);
    G[0]=0;
    G[1]=1;
    REP(2,INF){
        set<lo>temp;
        REPV(j,0,i){
            if(j==0 or j==i-1)temp.insert(1);
            else temp.insert(G[j-1]^G[i-j-2]);
        }
        while(temp.find(G[i])!=temp.end())G[i]++;
    }
    cin>>a;
    a+="$";
    REP(1,a.length()-1)if(a[i-1]==a[i+1]){
        char c=a[i];
        //debug(i);
        a[i]='$';
        if(check()){
            cout<<"First"<<endl;
            cout<<i+1<<endl;
            return 0;
        }
        a[i]=c;
    }
    cout<<"Second";
    return 0;
}


#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp> // Common file
//#include <ext/pb_ds/tree_policy.hpp> // Including seg_tree_order_statistics_node_update
#include <stdio.h>
#include <cassert>
using namespace std;
//using namespace __gnu_pbds;
typedef int lo;
typedef long double ld;
typedef pair<lo,lo> ll;//pair
typedef vector<lo> vl;  //vector of long
typedef vector<ll > vll;   //vector of pair
typedef priority_queue<lo>p_q;
typedef vector< vl > vvl;  //vector of vectors
#define X first
#define Y second
#define mp(a,b) make_pair((a),(b))
#define REP(a,b) for(lo i=(a);i<(lo)b;i++)//no need to declare variable i
#define REPE(a,b,c,d) REP(a,b)for(lo j=(c);j<(lo)d;j++)//no need to declare vaiables i,j
#define REPV(a,b,c) for(lo(a)=b;(a)<(c);(a)++)//a is the variable
#define IREP(a,b) for(lo i=(a);i>=(b);i--)
#define IREPV(a,b,c) for(lo(a)=b;(a)>=(c);(a)--)
#define all(v) (v).begin(),(v).end()
#define TRV(a) for(auto &it : a)
#define INF 5003
#define MOD 1000000007
#define M 1000000007
#define BLOCK 300
#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
#define pb(a) push_back((a))
#define eps 1e-8
#define PI 3.141592653589793
#define debug(x) cout<<#x<<"="<<x<<endl
#define debug2(x,y) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<endl;
#define debug3(x,y,z) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl;
#define debug4(x,y,z,w) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<" "<<#w<<"="<<w<<endl;
#define debug5(x,y,z,w,t) cout<<#x<<"="<<x <<" ";debug4(y,z,w,t);
#define debug6(p,x,y,z,w,t) cout<<#p<<" "<<p<<" "<<#x<<"="<<x <<" ";debug4(y,z,w,t);
#define print_matrix(a,n,m) REPE(0,n,0,m){cout<<(a)[i][j]<<((j==m-1)?'\n':' ');}
#define endl "\n"
template<typename T> ostream& operator<< ( ostream &o,vector<T> v ) {
    if ( v.size() >0 )o<<v[0];
    for ( unsigned   i=1; i<v.size(); i++ )o<<" "<<v[i];
    return o<<endl;
}
template<typename U,typename V> ostream& operator<< ( ostream &o,pair<U,V> p ) {
    return o<<"("<<p.first<<", "<<p.second<<") ";
}
template<typename T> istream& operator>> ( istream &in,vector<T> &v ) {
    for ( unsigned   i=0; i<v.size(); i++ )in>>v[i];
    return in;
}
template<typename T> istream& operator>> ( istream &in,pair <T,T> &p ) {
    in>>p.X;
    in>>p.Y;
    return in;
}
vvl dp(INF,vl (INF,-1));
string a;
void fun(lo l,lo r){
    if(r<l+2){
        dp[l][r]=0;
        return ;
    }
    lo ans=0;
    set<lo>temp;
    REP(l,r-1){
        lo x=-1;
        if(a[i]==a[i+2]){
            x=0;
            if(dp[l][i]==-1)fun(l,i);
            if(dp[i+2][r]==-1)fun(i+2,r);
            x^=dp[l][i];
            x^=dp[i+2][r];
        }
        if(x!=-1)temp.insert(x);
    }
    while(temp.find(ans)!=temp.end())ans++;
    dp[l][r]=ans;
}
int main(){
    //std::ios::sync_with_stdio(false);
	//cin.tie(0);cout.tie(0);cout.precision(20);
    cin>>a;
    REP(0,INF)dp[i][i]=0;
    fun(0,a.length()-1);
    if(dp[0][a.length()-1]==0){
        cout<<"Second";
        return 0;
    }
    cout<<"First"<<endl;
    REP(1,a.length()-1){
        if(dp[0][i-1]^dp[i+1][a.length()-1]==0 and a[i-1]==a[i+1]){
            cout<<i+1;
            return 0;
        }
    }
    return 0;
}


#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp> // Common file
//#include <ext/pb_ds/tree_policy.hpp> // Including seg_tree_order_statistics_node_update
#include <stdio.h>
#include <cassert>
using namespace std;
//using namespace __gnu_pbds;
typedef int lo;
typedef long double ld;
typedef pair<lo,lo> ll;//pair
typedef vector<lo> vl;  //vector of long
typedef vector<ll > vll;   //vector of pair
typedef priority_queue<lo>p_q;
typedef vector< vl > vvl;  //vector of vectors
#define X first
#define Y second
#define mp(a,b) make_pair((a),(b))
#define REP(a,b) for(lo i=(a);i<(lo)b;i++)//no need to declare variable i
#define REPE(a,b,c,d) REP(a,b)for(lo j=(c);j<(lo)d;j++)//no need to declare vaiables i,j
#define REPV(a,b,c) for(lo(a)=b;(a)<(c);(a)++)//a is the variable
#define IREP(a,b) for(lo i=(a);i>=(b);i--)
#define IREPV(a,b,c) for(lo(a)=b;(a)>=(c);(a)--)
#define all(v) (v).begin(),(v).end()
#define TRV(a) for(auto &it : a)
#define INF 5003
#define MOD 1000000007
#define M 1000000007
#define BLOCK 300
#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
#define pb(a) push_back((a))
#define eps 1e-8
#define PI 3.141592653589793
#define debug(x) cout<<#x<<"="<<x<<endl
#define debug2(x,y) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<endl;
#define debug3(x,y,z) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl;
#define debug4(x,y,z,w) cout<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<" "<<#w<<"="<<w<<endl;
#define debug5(x,y,z,w,t) cout<<#x<<"="<<x <<" ";debug4(y,z,w,t);
#define debug6(p,x,y,z,w,t) cout<<#p<<" "<<p<<" "<<#x<<"="<<x <<" ";debug4(y,z,w,t);
#define print_matrix(a,n,m) REPE(0,n,0,m){cout<<(a)[i][j]<<((j==m-1)?'\n':' ');}
#define endl "\n"
template<typename T> ostream& operator<< ( ostream &o,vector<T> v ) {
    if ( v.size() >0 )o<<v[0];
    for ( unsigned   i=1; i<v.size(); i++ )o<<" "<<v[i];
    return o<<endl;
}
template<typename U,typename V> ostream& operator<< ( ostream &o,pair<U,V> p ) {
    return o<<"("<<p.first<<", "<<p.second<<") ";
}
template<typename T> istream& operator>> ( istream &in,vector<T> &v ) {
    for ( unsigned   i=0; i<v.size(); i++ )in>>v[i];
    return in;
}
template<typename T> istream& operator>> ( istream &in,pair <T,T> &p ) {
    in>>p.X;
    in>>p.Y;
    return in;
}
vl G(INF,0);
string a;
bool check(){
    lo ans=0;//debug(a);
    lo add=0;
    REP(1,a.length()-1){
        if(a[i-1]==a[i+1] and a[i]!='$')add++;
        else{
            ans^=G[add];
            add=0;
        }
    }
    return ans==0;
}
int main(){
    std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);cout.precision(20);
    G[0]=0;
    G[1]=1;
    REP(2,INF){
        set<lo>temp;
        REPV(j,0,i){
            if(j==0 or j==i-1)temp.insert(1);
            else temp.insert(G[i-2]);
        }
        while(temp.find(G[i])!=temp.end())G[i]++;
    }
    cin>>a;
    a+="#";
    REP(1,a.length()-1)if(a[i-1]==a[i+1]){
        char c=a[i];
        //debug(i);
        a[i]='$';
        if(check()){
            cout<<"First"<<endl;
            cout<<i+1<<endl;
            return 0;
        }
        a[i]=c;
    }
    cout<<"Second";
    return 0;
}