Problem: Example

Input

2 2
..
..


Output

Second

Solution (in CPP):

Solution:
#include<stdio.h>
#include<algorithm>
using namespace std;
int dp[30][30][30][30];
char str[30][30];
int calc(int a,int b,int c,int d){
	if(a>=b||c>=d)return 0;
	if(dp[a][b][c][d]!=-1)return dp[a][b][c][d];
	int val[64];
	for(int i=0;i<64;i++)val[i]=0;
	for(int i=a;i<b;i++)for(int j=c;j<d;j++){
		if(str[i][j]=='X')continue;
		int tmp=0;
		tmp^=calc(a,i,c,j);
		tmp^=calc(i+1,b,c,j);
		tmp^=calc(a,i,j+1,d);
		tmp^=calc(i+1,b,j+1,d);
		val[tmp]=1;
	}
	for(int i=0;i<64;i++)if(!val[i])return dp[a][b][c][d]=i;
}
int main(){
	int a,b;scanf("%d%d",&a,&b);
	for(int i=0;i<a;i++)scanf("%s",str[i]);
	for(int i=0;i<30;i++)for(int j=0;j<30;j++)for(int k=0;k<30;k++)for(int l=0;l<30;l++)
		dp[i][j][k][l]=-1;
	int ret=calc(0,a,0,b);
	if(ret)printf("First\n");
	else printf("Second\n");
}