#include<bits/stdc++.h>
using namespace std;  
int n,m,p[20],v[20];
string s[20];
bool chk()
{
	memset(v,0,sizeof(v));
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<m;j++)
		{
			if(v[i]||v[j]||i==j)continue;
			int f=1;
			for(int k=0;k<n;k++)if(s[p[k]][i]!=s[k][j])
			{
				f=0;
				break;
			}
			if(f)v[i]=v[j]=1;
		}
	}
	int cc=0,t=0;
	for(int i=0;i<m;i++)if(!v[i])cc++,t=i;
	if(!cc)return true;
	if(cc>=2||m&1==0)return false;
	for(int i=0;i<n;i++)if(s[p[i]][t]!=s[i][t])return false;
	return true;
}
void dfs(int x,int v)
{
	if(x==(n+1)/2)
	{
		if(chk()){puts("YES");exit(0);}
		return;
	}
	for(int i=x;i<n;i++)
	{
		for(int j=i+1;j<n;j++)if(p[i]==-1&&p[j]==-1)
		{
			p[i]=j;p[j]=i;
			dfs(x+1,v);
			p[i]=-1;p[j]=-1;;
		}
		if(v&&p[i]==-1)
		{
			p[i]=i;
			dfs(x+1,false);
			p[i]=-1;
		}
	}
}
int main()  
{  
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++){cin>>s[i];p[i]=-1;}  
    dfs(0,n&1);
	printf("NO\n");
    return 0;
}