#include <bits/stdc++.h>
using namespace std;
const int MAX = 1e6 + 5;
const int MOD = 1e9 + 7;
int dr[4] = {0, 0, 1, -1};
int dc[4] = {1, -1, 0, 0};
int ddr[8] = {0, 0, 1, -1, 1, -1, 1, -1};
int ddc[8] = {1, -1, 0, 0, 1, -1, -1, 1};
bool isPrime(int n) {
  if (n <= 1) return false;
  for (int i = 2; i < n; i++)
    if (n % i == 0) return false;
  return true;
}
long long int power(long long int a, long long int b) {
  long long int ans = 1;
  while (b) {
    if (b & 1) ans = (ans * a) % MOD;
    a = (a * a) % MOD;
    b /= 2;
  }
  return ans;
}
long long int nCr(long long int n, long long int r) {
  long long int ans = 1, i;
  if (r > n - r) r = n - r;
  for (i = 0; i < r; i++) {
    ans = (ans * (n - i)) % MOD;
    ans = (ans * power(i + 1, MOD - 2)) % MOD;
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int t;
  t = 1;
  while (t--) {
    int n;
    cin >> n;
    map<int, int> mp, pm;
    set<int> s;
    int arr[n];
    for (int i = 0; i < n; i++) {
      cin >> arr[i];
      mp[arr[i]]++;
    }
    for (auto it : mp) {
      pm[it.second]++;
      s.insert(it.second);
    }
    int x = -1;
    if (s.size() == 1 && *s.begin() == 1) {
      x = n;
    } else if (s.size() == 1 && pm[*s.begin()] == 1) {
      x = n;
    } else if (s.size() == 2) {
      int a = *s.begin();
      s.erase(s.begin());
      int b = *s.begin();
      s.erase(s.begin());
      s.insert(a);
      s.insert(b);
      if (b - a == 1 && pm[b] == 1) {
        x = n;
      } else if (a == 1 && pm[a] == 1) {
        x = n;
      }
    }
    for (int i = n - 1; i >= 1; i--) {
      if (x != -1) {
        break;
      }
      pm[mp[arr[i]]]--;
      if (pm[mp[arr[i]]] == 0) {
        s.erase(mp[arr[i]]);
      }
      mp[arr[i]]--;
      if (mp[arr[i]] > 0) {
        pm[mp[arr[i]]]++;
        s.insert(mp[arr[i]]);
      }
      if (s.size() == 1 && *s.begin() == 1) {
        x = i;
      } else if (s.size() == 1 && pm[*s.begin()] == 1) {
        x = i;
      } else if (s.size() == 2) {
        int a = *s.begin();
        s.erase(s.begin());
        int b = *s.begin();
        s.erase(s.begin());
        s.insert(a);
        s.insert(b);
        if (b - a == 1 && pm[b] == 1) {
          x = i;
        } else if (a == 1 && pm[a] == 1) {
          x = i;
        }
      }
    }
    if (x == -1)
      cout << "1";
    else
      cout << x;
  }
  return 0;
}
