#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void Int(T &a) {
  bool minus = false;
  a = 0;
  char ch = getchar();
  while (true) {
    if (ch == '-' or (ch >= '0' && ch <= '9')) break;
    ch = getchar();
  }
  if (ch == '-')
    minus = true;
  else
    a = ch - '0';
  while (true) {
    ch = getchar();
    if (ch < '0' || ch > '9') break;
    a = a * 10 + (ch - '0');
  }
  if (minus) a *= -1;
}
template <typename T>
inline void Int(T &a, T &b) {
  Int(a), Int(b);
}
template <typename T>
inline void Int(T &a, T &b, T &c) {
  Int(a, b), Int(c);
}
template <typename T>
inline void Int(T &a, T &b, T &c, T &d) {
  Int(a, b), Int(c, d);
}
void err(istream_iterator<string> it) { cout << endl; }
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << a << ' ';
  err(++it, args...);
}
const int N = (int)2e5 + 5;
const int maxN = (int)1e6 + 6;
const long long Mod = (long long)1e9 + 7;
const int inf = (int)2e9;
const long long Inf = (long long)1e18;
const int mod = (int)1e9 + 7;
inline int add(int a, int b, int mod) {
  a += b;
  return a >= mod ? a - mod : a;
}
inline int sub(int a, int b, int mod) {
  a -= b;
  return a < 0 ? a + mod : a;
}
inline int mul(int a, int b, int mod) { return (long long)a * b % mod; }
int dp[5500][5500];
char s[1311];
void modify(char c, int row, int col) {
  int x = 0;
  if (c >= 'A')
    x = c - 'A' + 10;
  else
    x = c - '0';
  for (int i = col; i > col - 4; --i) {
    dp[row][i] = x % 2;
    x /= 2;
  }
}
bool ok(int c, int n) {
  for (int j = 1; j + c <= n; j += c) {
    int row = j, col = 1, row1 = j + c, col1 = c;
    while (col1 <= n) {
      int res = dp[row1][col1] - dp[row1][col - 1] - dp[row - 1][col1] +
                dp[row - 1][col - 1];
      if (res != 0 and res != (c * c)) return 0;
      col1 += c, col += c;
    }
  }
  return 1;
}
int main() {
  int test = 1, tc = 0;
  while (test--) {
    int n;
    Int(n);
    for (int i = 1; i <= n; ++i) {
      scanf("%s", s);
      int col = 4;
      for (int j = 0; j < n / 4; ++j) {
        modify(s[j], i, col);
        col += 4;
      }
      for (int j = 1; j <= n; ++j)
        dp[i][j] += dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1];
    }
    int res = 1;
    for (int i = 1; i * i <= n; ++i) {
      if (n % i == 0) {
        if (ok(i, n)) {
          return cout << (n / i) << '\n', 0;
        }
        if (ok(n / i, n)) res = max(res, i);
      }
    }
    cout << res << '\n';
  }
  return 0;
}
