import java.io.BufferedWriter;
	import java.io.IOException;
	import java.io.InputStream;
	import java.io.OutputStream;
	import java.io.OutputStreamWriter;
	import java.io.PrintWriter;
	import java.io.Writer;
	import java.util.Arrays;
	import java.util.InputMismatchException;
	import java.util.*;
	import java.io.*;
	import java.math.*;
	public class Main{

	static class Pair
		{ 
			int x; 
			int y; 
			int z;
			public Pair(int x, int y,int z) 
			{	 
				this.x = x; 
				this.y = y; 
				this.z=z;
			}	 
		} 
		static class Compare
		{ 
			static void compare(Pair arr[], int n) 
			{ 
				// Comparator to sort the pair according to second element 
				Arrays.sort(arr, new Comparator<Pair>() { 
					@Override public int compare(Pair p1, Pair p2) 
					{ 
						return p1.x-p2.x; // for increasing order of x
					}
				}); 
			} 
		}
		public static long pow(long a, long b)
		{
			long result=1;
			while(b>0)
			{
				if (b % 2 != 0)
				{
					result=(result*a);
					b--;
				} 
				a=(a*a);
				b /= 2;
			}   
					return result;
		}
		public static BigInteger fact(long num)
		{
					BigInteger fact=new BigInteger("1");
					int i=0;
					for(i=1; i<=num; i++)
					{
						BigInteger bg=BigInteger.valueOf(i);
						fact=fact.multiply(bg);
					}
					return fact;
				}
				public static int gcd(int a, int b)
				{
					if (a == 0)
						return b;
					return gcd(b%a, a);
				}
				
				public static int lcm(int a,int b)
				{
					return a * (b / gcd(a, b));
				}
				public static long sum(int h)
				{
					return (h*(h+1)/2);
				}
				public static void dfs(int parent,boolean[] visited)
				{
					ArrayList<Integer> arr=new ArrayList<Integer>();
					arr=graph.get(parent);
					visited[parent]=true;
					for(int i=0;i<arr.size();i++)
					{
						int num=arr.get(i);
						if(visited[num]==false)
						{
							dfs(num,visited);
						}
					}
				}
				static int k=0,l=0;
			//	static int count=0;
				static int[] min;
				static int min1=1000;
				static int last=0;
				static int[] euler;
				static ArrayList<Integer> level;
				static ArrayList<Integer> e;
				static ArrayList<ArrayList<Integer>> graph;
				public static void main(String args[])throws IOException
				{
					InputReader in=new InputReader(System.in);
					OutputWriter out=new OutputWriter(System.out);
				//	long a=pow(26,1000000005);
				//    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
					ArrayList<Integer> ar=new ArrayList<>();
					ArrayList<Integer> ar1=new ArrayList<>();
					ArrayList<Integer> index=new ArrayList<>();
					ArrayList<Integer> ar3=new ArrayList<>();
					ArrayList<Integer> ar4=new ArrayList<>();
					TreeSet<Integer> ts=new TreeSet<>();
					TreeSet<Integer> ts1=new TreeSet<>();
				//	TreeSet<String> pre=new TreeSet<>();
					HashMap<Integer,Integer> hash=new HashMap<>();
					HashMap<Long,Integer> hash1=new HashMap<Long,Integer>();
					HashMap<Long,Integer> hash2=new HashMap<Long,Integer>();
				/*	boolean[] prime=new boolean[1000001];
					for(int i=2;i*i<=1000000;i++)
					{
						if(prime[i]==false)
						{
							for(int j=2*i;j<=1000000;j+=i)
							{
								prime[j]=true;
							}
						}
					}*/
					int n=i();
					String[] s=new String[n];
					String[] bin=new String[n];
					int max=0;
					for(int i=0;i<n;i++)
					{
						s[i]=s();
						int tmp = Integer.parseInt(s[i], 16);
						bin[i]=Integer.toBinaryString(tmp);
						max=Math.max(max,bin[i].length());
					}
					for(int i=0;i<n;i++)
					{
						if(bin[i].length()<max)
						{
							String s1="";
							for(int j=0;j<max-bin[i].length();j++)
							{
								s1="0"+s1;
							}
							bin[i]=s1+bin[i];
						}
					}
					for(int i=0;i<n;i++)
					{
						bin[i]="1111";
					}
					max=4;
					int low=1;
					int ans=1;
					int high=max;
					while(low<=high)
					{
						int mid=low+(high-low)/2;
						if(check(bin,mid,max,n)==true)
						{
							ans=mid;
							low=mid+1;
						}
						else
						{
							high=mid-1;
						}
					}
					pln(ans+"");
				}
				public static boolean check(String[] bin, int mid, int max,int n)
				{
						int flag=0;
						char c='c';
						for(int i=0;i<n;i++)
						{
							String s1=bin[i];
							 c='c';
							int count=0;
							for(int j=0;j<s1.length();j++)
							{
								if(j==0)
								{
									c=s1.charAt(j);
									count=1;
								}
								else
								{
									if(c==s1.charAt(j))
									{
										count++;
									}
									else
									{
										if(count!=mid && count!=0)
										{
											flag=1;
											break;
										}
										if(count==mid)
											count=0;
										c=s1.charAt(j);
										count=1;
									}
									if(count==mid)
									{
										count=0;
									}
								}
							}
							if(flag==1)
							{
								break;
							}
						}
						if(flag==1)
						{
							return false;
						}
						else
						{
							max=bin[0].length();
							int count=0;
							for(int j=0;j<max;j++)
							{
								for(int i=0;i<n;i++)
								{
									String s1=bin[i];
									if(i==0)
									{
										c=bin[i].charAt(j);
										count=1;
									}
									else
									{
										if(c==bin[i].charAt(j))
										{
											count++;
										}
										else
										{
											if(count!=mid && count!=0)
											{
												flag=1;
												break;
											}
											else
											{
												count=1;
												c=bin[i].charAt(j);
											}
										}
										if(count==mid)
										{
											count=0;
										}
									}
								}
							}
							if(flag==1)
							{
								return false;
							}
							else
							{
								return true;
							}
						}
					
				}
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				/**/
				static InputReader in=new InputReader(System.in);
					static OutputWriter out=new OutputWriter(System.out);
					public static long l()
					{
						String s=in.String();
						return Long.parseLong(s);
					}
					public static void pln(String value)
					{
						System.out.println(value);
					}
					public static int i()
					{
						return in.Int();
					}
					public static String s()
					{
						return in.String();
					}
		}
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			class InputReader {
				 
				private InputStream stream;
				private byte[] buf = new byte[1024];
				private int curChar;
				private int numChars;
				private SpaceCharFilter filter;
			 
				public InputReader(InputStream stream) {
					this.stream = stream;
				}
			 
				public int read() {
					if (numChars== -1)
						throw new InputMismatchException();
					if (curChar >= numChars) {
						curChar = 0;
						try {
							numChars = stream.read(buf);
						} catch (IOException e) {
							throw new InputMismatchException();
						}
						if (numChars <= 0)
							return -1;
					}
					return buf[curChar++];
				}
			 
				public int Int() {
					int c = read();
					while (isSpaceChar(c))
						c = read();
					int sgn = 1;
					if (c == '-') {
						sgn = -1;
						c = read();
					}
					int res = 0;
					do {
						if (c < '0' || c > '9')
							throw new InputMismatchException();
						res *= 10;
						res += c - '0';
						c = read();
					} while (!isSpaceChar(c));
					return res * sgn;
				}
			 
				public String String() {
					int c = read();
					while (isSpaceChar(c))
						c = read();
					StringBuilder res = new StringBuilder();
					do {
						res.appendCodePoint(c);
						c = read();
					} while (!isSpaceChar(c));
					return res.toString();
				}
			 
				public boolean isSpaceChar(int c) {
					if (filter != null)
						return filter.isSpaceChar(c);
					return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
				}
			 
				public String next() {
					return String();
				}
			 
				public interface SpaceCharFilter {
					public boolean isSpaceChar(int ch);
				}
			}
			 
			class OutputWriter {
				private final PrintWriter writer;
			 
				public OutputWriter(OutputStream outputStream) {
					writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
				}
			 
				public OutputWriter(Writer writer) {
					this.writer = new PrintWriter(writer);
				}
			 
				public void print(Object...objects) {
					for (int i = 0; i < objects.length; i++) {
						if (i != 0)
							writer.print(' ');
						writer.print(objects[i]);
					}
				}
			 
				public void printLine(Object...objects) {
					print(objects);
					writer.println();
				}
			 
				public void close() {
					writer.close();
				}
			 
				public void flush() {
					writer.flush();
				}
			 
				}
			 
				class IOUtils {
			 
				public static int[] readIntArray(InputReader in, int size) {
					int[] array = new int[size];
					for (int i = 0; i < size; i++)
						array[i] = in.Int();
					return array;
				}
			 
				} 