#include<bits/stdc++.h>
using namespace std;
int n,m,a[22],b[22];
char c[22][22];
string s[22];
void dd1(int x,bool bl)
{
	if(x==m)
	{
		cout<<"YES"<<endl;
		exit(0);
	}
	else if(b[x]!=-1)
	{
		dd1(x+1,bl);
	}
	else
	{
		for(int i=x+1;i<m;i++)
		{
			if(b[i]!=-1)
			{
				continue;
			}
			int j;
			for(j=0;j<n;j++)
			{
				if(c[j][x]!=c[a[j]][i])
				{
					break;
				}
			}
			if(j==n)
			{
				b[x]=i;
				b[i]=x;
				dd1(x+1,bl);
				b[x]=-1;
				b[i]=-1;
			}
		}
		if(!bl)
		{
			int j;
			for(j=0;j<n;j++)
			{
				if(c[j][x]!=c[a[j]][x])
				{
					break;
				}
			}
			if(j==n)
			{
				b[x]=x;
				dd1(x+1,true);
				b[x]=-1;
			}
		}
	}
}
void dd2(int x,bool bl)
{
	if(x==n)
	{
		dd1(0,m%2==0);
	}
	else if(a[x]!=-1)
	{
		dd2(x+1,bl);
	}
	else
	{
		for(int i=x+1;i<n;i++)
		{
			if(a[i]!=-1)
			{
				continue;
			}
			if(s[x]!=s[i])
			{
				continue;
			}
			a[x]=i;
			a[i]=x;
			dd2(x+1,bl);
			a[x]=-1;
			a[i]=-1;
		}
		if(!bl)
		{
			a[x]=x;
			dd2(x+1,true);
			a[x]=-1;
		}
	}
}
int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>c[i][j];
		}
	}
	for(int i=0;i<n;i++)
	{
		s[i]=c[i];
		sort(s[i].begin(),s[i].end());
	}
	for(int i=0;i<n;i++)
	{
		a[i]=-1;
	}
	for(int j=0;j<m;j++)
	{
		b[j]=-1;
	}
	dd2(0,n%2==0);
	cout<<"NO"<<endl;
	return 0;
}