Problem: Example

Input

2 2
..
..


Output

Second

Solution (in CPP):

Solution:
#include<bits/stdc++.h>
using namespace std;
int mem[25][25][25][25];
int H,W;
char t[20][20];

int solve(int ay,int ax,int by,int bx){
  if(mem[ay][ax][by][bx]!=-1)return mem[ay][ax][by][bx];
  set<int> s;
  for(int i=ay;i<by;i++){
    for(int j=ax;j<bx;j++){
      if(t[i][j]=='X')continue;
      int lu=solve(ay,ax,i,j);
      int ld=solve(i+1,ax,by,j);
      int ru=solve(ay,j+1,i,bx);
      int rd=solve(i+1,j+1,by,bx);
      s.insert(lu^ld^ru^rd);
    }
  }
  int res;
  for(int i=0;;i++){
    if(s.count(i)==0){
      res=i;
      break;
    }
  }
  return mem[ay][ax][by][bx]=res;
}

int main(){
  memset(mem,-1,sizeof(mem));
  cin>>H>>W;
  for(int i=0;i<H;i++)
    for(int j=0;j<W;j++)
      cin>>t[i][j];
  cout<<(solve(0,0,H,W)?"First":"Second")<<endl;
  return 0;
}