Problem: Example

Input

2 2
..
..


Output

Second

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
#define N 21
using namespace std;
int h,w;
string mp[N];

int used[N][N][N][N],mem[N][N][N][N];
int dfs(int y,int x,int Y,int X){
  int &res=mem[y][x][Y][X];
  if(y>Y||x>X) return 0;
  if(used[y][x][Y][X]++) return res;
   
  set<int> S;
  for(int i=y;i<=Y;i++)
    for(int j=x;j<=X;j++){
      if(mp[i][j]=='X')continue;
      int a=dfs(y,x,i-1,j-1);
      int b=dfs(y,j+1,i-1,X);
      int c=dfs(i+1,x,Y,j-1);
      int d=dfs(i+1,j+1,Y,X);
      S.insert(a^b^c^d);
    }
  while(S.count(res))res++;
  return res;
}

int main(){
  cin>>h>>w;
  for(int i=0;i<h;i++)cin>>mp[i];
  cout <<(dfs(0,0,h-1,w-1)!=0? "First":"Second")<<endl;
  return 0;
}