#include<bits/stdc++.h>
#define fi first
#define se second
#define show(x) cerr<<#x<<"="<<x<<"\n"
typedef long long ll;
using namespace std;
int n,m,h,w;
char a[50][50];
bool check(){
bool b[50][50];
char c[50][50];
for(int i=0;i<h;i++)for(int j=0;j<w;j++)c[i][j]=a[i][j];
while(1){
bool up=0;
for(int i=0;i<h-1;i++){
for(int j=0;j<w;j++){
if(c[i][j]!='.' && c[i+1][j]=='.'){
swap(c[i][j],c[i+1][j]);
up=1;
}
}
}
if(!up)break;
}
while(1){
bool update=0;
for(int i=0;i<h;i++)for(int j=0;j<w;j++)b[i][j]=0;
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
if(j+n>w)continue;
if(c[i][j]=='.')continue;
int nowcolor;
bool flag=1;
for(int k=0;k<n;k++){
if(k==0){
nowcolor=c[i][j+k]-'a';
continue;
}
if(c[i][j+k]!=(char)('a'+nowcolor))flag=0;
}
if(flag){
for(int k=0;k<n;k++){
b[i][j+k]=1;
}
}
}
}
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
if(i+n>h)continue;
if(c[i][j]=='.')continue;
int nowcolor;
bool flag=1;
for(int k=0;k<n;k++){
if(k==0){
nowcolor=c[i+k][j]-'a';
continue;
}
if(c[i+k][j]!=(char)('a'+nowcolor))flag=0;
}
if(flag){
for(int k=0;k<n;k++){
b[i+k][j]=1;
}
}
}
}
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
if(b[i][j]==1){
c[i][j]='.';
update=1;
}
}
}
if(!update)break;
while(1){
bool up=0;
for(int i=0;i<h-1;i++){
for(int j=0;j<w;j++){
if(c[i][j]!='.' && c[i+1][j]=='.'){
swap(c[i][j],c[i+1][j]);
up=1;
}
}
}
if(!up)break;
}
}
bool ok=1;
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
if(c[i][j]!='.')ok=0;
}
}
return ok;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.precision(10);
cout<<fixed;
#ifdef LOCAL_DEFINE
FILE *stream1;
stream1=freopen("in","r",stdin);
if(stream1==NULL)return 0;
#endif
cin>>h>>w>>n;
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
cin>>a[i][j];
}
}
for(int i=0;i<h;i++){
for(int j=0;j<w-1;j++){
swap(a[i][j],a[i][j+1]);
if(check()){
cout<<"YES"<<endl;
exit(0);
}
swap(a[i][j],a[i][j+1]);
}
}
cout<<"NO"<<endl;
#ifdef LOCAL_DEFINE
cerr<<"Time elapsed: "<<1.0*clock()/CLOCKS_PER_SEC<<"s.\n";
fclose(stream1);
#endif
return 0;
}
- 賢い方法とか簡潔に書く方法とか全く思いつかなかったから、とにかくゴリゴリ書いた。
- 誰かスマートな方法教えてくりー