#include <bits/stdc++.h>
namespace FastIO {
bool IOerror = 0;
inline char nc() {
  static char buf[100000], *p1 = buf + 100000, *pend = buf + 100000;
  if (p1 == pend) {
    p1 = buf;
    pend = buf + fread(buf, 1, 100000, stdin);
    if (pend == p1) {
      IOerror = 1;
      return -1;
    }
  }
  return *p1++;
}
inline bool blank(char ch) {
  return ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t';
}
template <class T>
inline bool read(T& x) {
  bool sign = 0;
  char ch = nc();
  x = 0;
  for (; blank(ch); ch = nc())
    ;
  if (IOerror) return false;
  if (ch == '-') sign = 1, ch = nc();
  for (; ch >= '0' && ch <= '9'; ch = nc()) x = x * 10 + ch - '0';
  if (sign) x = -x;
  return true;
}
template <class T, class... U>
bool read(T& h, U&... t) {
  return read(h) && read(t...);
}
};  // namespace FastIO
using namespace std;
using namespace FastIO;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int INF = 0x3f3f3f3f;
const int N = 2e5 + 10;
int a[N], c[N];
int main() {
  int n;
  read(n);
  int ma = 0;
  for (int i = 1; i <= n; i++) {
    read(a[i]);
    c[a[i]]++;
    ma = max(ma, c[a[i]]);
  }
  int x = 0;
  for (int i = 1; i <= 100; i++)
    if (c[i] == ma) x = i;
  unordered_map<int, int> pre;
  int ans = 0;
  for (int y = 1; y <= 100; y++) {
    if (x == y) continue;
    int sum = 0;
    pre.clear();
    pre[0] = 1;
    for (int i = 1; i <= n; i++) {
      if (a[i] == x)
        sum++;
      else if (a[i] == y)
        sum--;
      if (pre.count(sum))
        ans = max(ans, i - pre[sum] + 1);
      else
        pre[sum] = i + 1;
    }
  }
  printf("%d\n", ans);
  return 0;
}
