http://codeforces.com/contest/510/problem/B
#include<bits/stdc++.h>
using namespace std;
int n,m;
int ok;
char edge[52][52];
int vis[52][52];
int stat[52][52];
int dir[][2]={{1,0},{0,1},{-1,0},{0,-1}};
void dfs(int x,int y)
{
if(ok==0)
return ;
int i,j,k;
int xx,yy;
for(i=0;i<4;i++)
{
xx=x+dir[i][0];
yy=y+dir[i][1];
if(xx<0||yy<0||edge[xx][yy]!=edge[x][y])
continue;
if(stat[xx][yy])
{
if(stat[xx][yy]-stat[x][y]>=3)
{
ok=0;
return ;
}
else
continue;
}
stat[xx][yy]=stat[x][y]+1;
dfs(xx,yy);
}
}
int main()
{
std::ios::sync_with_stdio(false);
cin>>n>>m;
memset(stat,0,sizeof(stat));
int i,j,k;
ok=1;
for(i=0;i<n;i++)
cin>>edge[i];
for(i=0;i<n&&ok;i++)
for(j=0;j<m&&ok;j++)
{
if(stat[i][j])
continue;
dfs(i,j);
if(ok==0)
{
break;
}
}
if(ok==0)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}