#include<bits/stdc++.h>
using namespace std;
const int fni=0xc0c0c0c0;
int n,m,p,hs[2100000],sta[50000],cnt,res;
void pr(int x){for(int i=0;i<=m;i++)printf("%d",(x>>i*3)&7);}
int f[2][16][50000];
char s[30][30];
int num[30];
void dfs1(int pos,int msk,int fre,int tms){
if(pos==m+1){
if(tms)return;
for(int i=1;i<pos;i++){
if((num[i]==1||num[i]==2||num[i]==4)&&num[i-1]==3&&num[i+1]==3)return;
if(num[i]==6&&(num[i-1]==3||num[i+1]==3))return;
}
cnt++,hs[msk]=cnt,sta[cnt]=msk;
return;
}
num[pos]=0;dfs1(pos+1,msk,fre,tms);
num[pos]=3,dfs1(pos+1,msk+(3<<pos3),fre,tms);
num[pos]=5;dfs1(pos+1,msk+(5<<pos3),fre,tms);
if(!pos||num[pos-1]==0||num[pos-1]5){
num[pos]=1,dfs1(pos+1,msk+(1<<pos3),fre,tms+1);
num[pos]=6,dfs1(pos+1,msk+(6<<pos3),fre,tms);
}
if(!pos||(num[pos-1]!=2&&num[pos-1]!=6&&num[pos-1]!=4))num[pos]=2,dfs1(pos+1,msk+(2<<pos3),fre,tms-1);
if((!pos||num[pos-1]==0||num[pos-1]==5||num[pos-1]==3)&&fre<2)num[pos]=4,dfs1(pos+1,msk+(4<<pos3),fre+1,tms);
}
int nex(int y,int k){
if(ym-1){
int L=k>>m3;k-=(L<<m3);
if(L!=0&&L!=3&&L!=5)return 0;
return hs[k<<3];
}
return hs[k];
}
int P=0,Q=1;
void chmx(int j,int w,int id,int nw,int K,int bon=0){
int nid=nex(j,K);
}
int nex2(int y,int K){
for(int i=y,j=0;i<=m;i++){
if(((K>>i3)&7)==1)j++;
if(((K>>i3)&7)==2&&!j--)return i;
}
}
int las1(int y,int K){
for(int i=y,j=0;i>=0;i--){
if(((K>>i3)&7)==2)j++;
if(((K>>i3)&7)==1&&!j--)return i;
}
}
int main(){
scanf("%d%d%d",&n,&m,&p);
for(int i=0;i<n;i++)scanf("%s",s[i]);
if(n<m){
for(int i=0;i<n;i++)for(int j=i+1;j<m;j++)swap(s[i][j],s[j][i]);
swap(n,m);
}
dfs1(0,0,0,0);
}