#include <fstream>
#include <vector>
#define _h 131
#define _H 666013
using namespace std;
ifstream fin ("map.in");
ofstream fout ("map.out");
void build(char [], vector <int> &, int );
void cb(int , int , vector <vector <int> > , int , int , int &);
int main()
{
char b[2001];
int n,m,i;
vector< vector <int> > hash;
fin>>n>>m;
hash.resize(n+1);
fin.get();
for(i=1;i<=n;i++)
{
hash[i].resize(m+1);
fin.get(b,2000);
fin.get();
build(b,hash[i],m);
}
for(i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
fout<<hash[i].at(j)<<" ";
fout<<"\n";
}
int r=0;
cb(1,m/2,hash,n,m,r);
fout<<m-r+1;
return 0;
}
void cb(int li, int ls, vector <vector <int> > hash, int n, int m, int &r)
{
if(li>ls) return;
int mij=(li+ls)/2,ok=1;
for(int i=1;i<=n && ok;i++)
if(hash[i].at(mij)!=hash[i].at(m-mij+1)) ok=0;
if(ok)
{
r=mij;
return cb(mij+1,ls,hash,n,m,r);
}
else
return cb(li,mij-1,hash,n,m,r);
}
void build(char s[], vector <int> &v, int n)
{
int i,c,t=n/2+1;
for(i=1,c=1;i<t;i++)
{
c=_h*c+s[i-1];
if(c>_H) c%=_H;
v[i]=c;
}
for(i=n,c=1;i>=t;i--)
{
c=_h*c+s[i-1];
if(c>_H) c%=_H;
v[i]=c;
}
}