#include <bits/stdc++.h>   using namespace std;   int n;   int a[100007], ans[100007], vis[100007];   int count(int x) {     int cnt = 0, now = 0;     memset(vis, 255, sizeof(vis));     for (int i = 1; i <= n; i++) {       if (vis[a[i]] == now) continue;       vis[a[i]] = now;       if (++cnt > x) {         cnt = 1;         vis[a[i]] = ++now;       }     }     return now + 1;   }   void work(int l, int r) {     if (l > r) return;     int cnt1 = count(l), cnt2 = count(r);     if (cnt1 == cnt2) {       for (int i = l; i <= r; i++) ans[i] = cnt1;       return;     }     ans[l] = cnt1;     ans[r] = cnt2;     int mid = (l + r) >> 1;     work(l + 1, mid);     work(mid + 1, r - 1);   }   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; i++) scanf( %d , &a[i]);     work(1, n);     for (int i = 1; i <= n; i++) printf( %d  , ans[i]);     return 0;   }   