#include <bits/stdc++.h>
using namespace std;
struct Node {
  int v, id;
  bool operator<(const Node& p) const {
    if (v == p.v) return id < p.id;
    return v < p.v;
  }
};
const int N = 1e5 + 10;
int a[N], cnt[N];
set<Node> s;
int main() {
  int n;
  scanf("%d", &n);
  set<Node>::iterator it;
  set<Node>::iterator it2;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    cnt[a[i]]++;
  }
  for (int i = 1; i <= 100000; i++) {
    if (cnt[i]) s.insert((Node){cnt[i], i});
  }
  for (int i = n; i >= 2; i--) {
    if ((int)s.size() == 1) {
      printf("%d\n", i);
      return 0;
    }
    it = s.begin();
    it2 = s.end();
    it2--;
    if (it->v == 1) {
      it++;
      if (it->v == it2->v) {
        printf("%d\n", i);
        return 0;
      }
      it--;
    }
    if (it2->v == it->v + 1) {
      it2--;
      if (it->v == it2->v) {
        printf("%d\n", i);
        return 0;
      }
    }
    it = s.lower_bound((Node){cnt[a[i]], a[i]});
    s.erase(it);
    if (--cnt[a[i]]) s.insert((Node){cnt[a[i]], a[i]});
  }
  printf("1\n");
  return 0;
}
