#include<bits/stdc++.h>
using namespace std;
int n,m,chk[15];
char s[15][15],t[15][15];
vector<pair<int,int> >pick;
void go(int r)
{
	if(r<=1)
	{
		int x=-1;
		for(int i=0;i<n;i++)
		{
			if(chk[i]==2)
			{
				x=i;
			}
		}
		int y=0;
		for(int i=0;i<pick.size();i++)
		{
			for(int j=0;j<m;j++)
			{
				t[y][j]=s[pick[i].first][j];
			}
			y++;
		}
		if(x>=0)
		{
			for(int j=0;j<m;j++)
			{
				t[y][j]=s[x][j];
			}
			y++;
		}
		for(int i=pick.size()-1;i>=0;i--)
		{
			for(int j=0;j<m;j++)
			{
				t[y][j]=s[pick[i].second][j];
			}
			y++;
		}
		vector<string>p;
		for(int j=0;j<m;j++)
		{
			string s="";
			for(int i=0;i<n;i++)
			{
				s+=t[i][j];
			}
			p.push_back(s);
		}
		for(int i=0;i<p.size();i++)
		{
			string s=p[i];
			reverse(s.begin(),s.end());
			for(int j=i+1;j<p.size();j++)
			{
				if(s==p[j])
				{
					p.erase(p.begin()+j);
					p.erase(p.begin()+i);
					i--;
					break;
				}
			}
		}
		if(p.size()==1)
		{
			string s=p[0];
			reverse(s.begin(),s.end());
			if(p[0]!=s)
			{
				return;
			}
		}
		if(p.size()<=1)
		{
			cout<<"YES"<<endl;
			exit(0);
		}
	}
	else
	{
		int x;
		for(int i=0;i<n;i++)
		{
			if(!chk[i])
			{
				x=i;
				break;
			}
		}
		chk[x]=1;
		for(int i=x+1;i<n;i++)
		{
			if(!chk[i])
			{
				chk[i]=1;
				pick.push_back(make_pair(x,i));
				go(r-2);
				pick.pop_back();
				chk[i]=0;
			}
		}
		chk[x]=0;
	}
}
void slove()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>s[i][j];
		}
	}
	if(n%2)
	{
		for(int i=0;i<n;i++)
		{
			chk[i]=2;
			go(n-1);
			chk[i]=0;
		}
	}
	else
	{
		go(n);
	}
	cout<<"NO"<<endl;
}
int main()
{
	slove();
	return 0;
}