#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=6e3+100;
const ll inf=1e18+10;
int n,m;
map<char ,int >mp;
int a[maxn][maxn];

void bt(){for(int i=0;i<9;i++)mp[i+'0']=i;mp['A']=10;mp['B']=11;mp['C']=12;mp['D']=13;mp['E']=14;mp['F']=15;}
	


void add(int i,int cnt,char x)
{
	int num=mp[x];
	for(int j=cnt+3;j>=cnt;j--)
	{
		if(num%2==1)a[i][j]=1;
		num/=2;
	}
}

int main()
{
	bt();
	cin>>n;
	getchar();
	for(int i=1;i<=n;i++)
	{
		char c; int cnt=1;
		while(c=getchar())
		{
			if(c=='\n')break;
			add(i,cnt,c); cnt+=4;
		}
	}
	/*for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)cout<<a[i][j];cout<<endl;
	}*/
	int h=n,s=n;
	for(int i=1;i<=n;i++)
	{
		int now=a[i][1],lian=0,ans=n;
		for(int j=1;j<=n;j++)
		{
			if(a[i][j]==now)lian++;
			else
			{
				now=!now;
				ans=__gcd(ans,lian);
				lian=0;
			}
		}
		h=__gcd(h,ans);
	}
	
	for(int j=1;j<=n;j++)
	{
		int now=a[1][j],lian=0,ans=n;
		for(int i=1;i<=n;i++)
		{
			if(a[i][j]==now)lian++;
			else
			{
				now=!now;
				ans=__gcd(ans,lian);
				lian=0;
			}
		}
		s=__gcd(s,ans);
	}
	int ans=__gcd(h,s);
	cout<<ans;
}

			 	   			  		   	    	   			