using System;
using System.Collections.Generic;
using System.Linq;

class Program
    {
        static void Main(string[] args)
        {
            string[] input = Console.ReadLine().Split(' ');
            short N = Convert.ToInt16(input[0]);

            Dictionary<string, int[]> validnaPolja = new Dictionary<string, int[]>();
            List<string> invalidnaPolja = new List<string>();
            string[] prethodniRed = new string[N];

            for(int y = 0; y < N; y++)
            {
                string[] red = Console.ReadLine().Split(' ');
                for(int x = 0; x < N; x++)
                {
                    if (invalidnaPolja.Contains(red[x])) continue;
                    else if (!validnaPolja.Keys.Contains(red[x]))
                    {
                        validnaPolja.Add(red[x], new int[] { y, x, y, x });
                        continue;
                    }
                    else if (validnaPolja[red[x]][0] == y)
                    {
                        validnaPolja[red[x]][3] = x;
                        continue;
                    }

                    if (red[x] == prethodniRed[x]) {
                        int razlika = (validnaPolja[red[x]][3] - validnaPolja[red[x]][1])+1;
                        try
                        {
                            if (red.ToList().GetRange(validnaPolja[red[x]][1], razlika).Except(prethodniRed.ToList().GetRange(validnaPolja[red[x]][1], razlika)).ToList().Count == 0 &&
                            validnaPolja[red[x]][1] == x && red[x + razlika + 1] != red[x]) 
                            {
                                validnaPolja[red[x]][2]++;
                                x += razlika-1;
                            }
                            else
                            {
                                invalidnaPolja.Add(red[x]);
                                validnaPolja.Remove(red[x]);
                            }
                        }
                        catch
                        {
                            if (red.ToList().GetRange(validnaPolja[red[x]][1], razlika).Except(prethodniRed.ToList().GetRange(validnaPolja[red[x]][1], razlika)).ToList().Count == 0 &&
                            validnaPolja[red[x]][1] == x) 
                            {
                                validnaPolja[red[x]][2]++;
                                x += razlika-1;
                            }
                            else
                            {
                                invalidnaPolja.Add(red[x]);
                                validnaPolja.Remove(red[x]);
                            }
                        }
                            }
                            else {
                                invalidnaPolja.Add(red[x]);
                                validnaPolja.Remove(red[x]);
                            }
                }
                prethodniRed = red;
            }
            Console.WriteLine(validnaPolja.Count);
        }
    }