1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using vi = vector<int>;
using vb = vector<bool>;
using vc = vector<char>;
using vvc = vector<vc>;
using vvi = vector<vi>;
using vvb = vector<vb>;
using vpii = vector<pii>;
using vpll = vector<pll>;
using vll = vector<ll>;
using vull = vector<ull>;
using vvll = vector<vll>;
using namespace __gnu_pbds;
template <typename T> using ordered_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define f first
#define s second
#define pb emplace_back
#define rep(i, begin, end) for (auto i = (begin); i <= (end); ++i)
#define repr(i, begin, end) for (auto i = (begin); i >= (end); --i)
#define bend(X) X.begin(), X.end()
#ifdef LOCAL
template <typename T> void __deb(const T& x) { cout << x << endl; }
template <typename T, typename... Args> void __deb(const T& x, Args... xs) { cout << x << ", "; __deb(xs...); }
#define deb(...) do { cout << #__VA_ARGS__ << " = "; __deb(__VA_ARGS__); } while (0)
#define say(...) do { __deb(__VA_ARGS__); } while (0)
#else
#define deb(...)
#define say(...)
#define endl '\n'
#endif
constexpr int INF = 1e9 + 1e7;
constexpr ll INFl = INF;
constexpr ll INFll = 1e18 + 1e16;
void print() { cout << '\n'; }
template <typename T1, typename T2> ostream &operator<<(ostream &os, pair<T1, T2> x) { os << x.f << ' ' << x.s; return os; }
template <typename T1, typename T2> istream &operator>>(istream &is, pair<T1, T2> &x) { is >> x.f >> x.s; return is; }
template <typename Ch, typename Tr, typename T> ostream &operator<<(basic_ostream<Ch, Tr> &os, T x) { for (auto i : x) os << i << ' '; return os; }
template <typename T> istream &operator>>(istream &is, vector<T> &x) { for (T &i : x) is >> i; return is; }
template <typename T, typename... Args> void print(T x, Args... args) { cout << x << ' '; print(args...); }
template <typename T1, typename T2> pair<T1, T2> operator+(const pair<T1, T2> &A, const pair<T1, T2> &B) { return {A.f + B.f, A.s + B.s}; }
template <typename T1, typename T2> pair<T1, T2> operator-(const pair<T1, T2> &A, const pair<T1, T2> &B) { return {A.f - B.f, A.s - B.s}; }
template <typename T1, typename T2> pair<T1, T2> &operator+=(pair<T1, T2> &A, const pair<T1, T2> &B) { A.f += B.f; A.s += B.s; return A; }
template <typename T1, typename T2> pair<T1, T2> &operator-=(pair<T1, T2> &A, const pair<T1, T2> &B) { A.f -= B.f; A.s -= B.s; return A; }
template <typename T1, typename T2> pair<T1, T2> operator-(const pair<T1, T2> &A) { return {-A.f, -A.s}; }
template <typename T1, typename T2> bool maxe(T1 &A, const T2 &B) { if (B > A) { A = B; return 1; } return 0; }
template <typename T1, typename T2> bool mine(T1 &A, const T2 &B) { if (B < A) { A = B; return 1; } return 0; }
struct input {
private:
  int n, m;
public:
  input() : n(0){};
  input(int n) : n(0), m(n){};
  input(int n, int m) : n(n), m(m + 1){};
  template <typename T> operator T() { T x; cin >> x; return x; }
  template <typename T> operator vector<T>() { vector<T> v(m); for (int i = n; i < m; i++) cin >> v[i]; return v; }
  template <typename T> operator set<T>() { T x; set<T> s; for (int i = n; i < m; i++) { cin >> x; s.emplace(x); } return s; }
};
class Nic { } nic;
template <typename T> Nic operator<<(Nic, T) { return nic; }
Nic operator<<(ostream &, Nic) { return nic; }
constexpr int mod = 1e9 + 7;

//////////////////////////////////////////////////

auto solve() {
  int n = input();
  vi R(n+1);
  map<int, int> M;
  for (const int x : vi(input(n)))
    M[x]++;
  for (const auto [_, x] : M)
    rep (i, 1, x)
      R[i] += x - x % i;
  rep (i, 1, n)
    cout << R[i] << " ";
  cout << endl;

  return nic;
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int noOfTests = 1;
  // cin >> noOfTests;
  while (noOfTests-- > 0)
    cout << solve() << '\n';
  return 0;
}