There is an H \times W grid (H vertical, W horizontal), where each square contains a lowercase English letter. Specifically, the letter in the square at the i-th row and j-th column is equal to the j-th character in the string S_i.

Snuke can apply the following operation to this grid any number of times:

* Choose two different rows and swap them. Or, choose two different columns and swap them.



Snuke wants this grid to be symmetric. That is, for any 1 \leq i \leq H and 1 \leq j \leq W, the letter in the square at the i-th row and j-th column and the letter in the square at the (H + 1 - i)-th row and (W + 1 - j)-th column should be equal.

Determine if Snuke can achieve this objective.

Constraints

* 1 \leq H \leq 12
* 1 \leq W \leq 12
* |S_i| = W
* S_i consists of lowercase English letters.

Input

Input is given from Standard Input in the following format:


H W
S_1
S_2
:
S_H


Output

If Snuke can make the grid symmetric, print `YES`; if he cannot, print `NO`.

Examples

Input

2 3
arc
rac


Output

YES


Input

3 7
atcoder
regular
contest


Output

NO


Input

12 12
bimonigaloaf
faurwlkbleht
dexwimqxzxbb
lxdgyoifcxid
ydxiliocfdgx
nfoabgilamoi
ibxbdqmzxxwe
pqirylfrcrnf
wtehfkllbura
yfrnpflcrirq
wvcclwgiubrk
lkbrwgwuiccv


Output

YES
#include <bits/stdc++.h>
#define INF 1000000000
#define LINF 1000000000000000000
#define MOD 1000000007
#define mod 1000007
#define INF63 1061109567
#define INF127 9187201950435737471
#define UINF 18446744073709551615
#define F first
#define S second
#define ll long long
#define N 15
#define M 5010
using namespace std;
ll n,m,cga[N],cgb[N],caa=0,cab=0;
string sts[N],stc[N];
int main(){
	ll i,j,cnt;
	cin>>n>>m;
	for(i=0;i<n;i++)
	{
		cin>>sts[i];
	}
	for(i=0;i<m;i++)
	{
		stc[i]="";
	}
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
		{
			stc[j]+=sts[i][j];
		}
	}
	for(i=0;i<n;i++)
	{
		sort(sts[i].begin(),sts[i].end());
	}
	for(i=0;i<m;i++)
	{
		sort(stc[i].begin(),stc[i].end());
	}
	for(i=0;i<n;i++)
	{
		cnt=0;
		for(j=0;j<n;j++)
		{
			if(sts[i]==sts[j])
			{
				cnt++;
			}
		}
		cga[cnt]++;
	}
	for(i=0;i<m;i++)
	{
		cnt=0;
		for(j=0;j<m;j++)
		{
			if(stc[i]==stc[j])
			{
				cnt++;
			}
		}
		cgb[cnt]++;
	}
	for(i=1;i<12;i+=2)
	{
		caa+=cga[i]/i;
	}
	for(i=1;i<12;i+=2)
	{
		cab+=cgb[i]/i;
	}
	if(caa>n%2||cab>m%2)
	{
		puts("NO");
	}
	else if((n%2==0&&caa)||(m%2==0&&cab))
	{
		puts("NO");
	}
	else if(n>=7&&n<=9&&m>=7&&m<9&&cga[n]&&cgb[m])
	{
		puts("NO");
	}
	else
	{
		puts("YES");
	}
	return 0;
}