program distinct_numbers
  implicit none
  integer :: n, m = 0, i, k, x
  integer, dimension(0:300001) :: a = 0, b = 0, s = 0
  read(*,*) n
  read(*,*) b(1:n)
  do i = 1, n
    a(b(i)) = a(b(i))+1
  end do
  call quick_sort(a(1:n))
  do i = 1, n
    s(i) = s(i-1)+a(i)
  end do
  i = n
  x = n
  do k = 1, n
    do
      do while (i > 0 .and. a(i) >= x)
        i = i-1
      end do
      if (x*(n-i)+s(i) >= x*k) exit
      x = x-1
    end do
    write(*,'(i0)') x
  end do
contains
  recursive subroutine quick_sort(a)
    integer, intent(inout) :: a(:)
    integer :: n, l, r, m
    integer :: p
    n = size(a,1)
    l = 1
    r = n
    m = (n+1)/2
    p = a(l)+a(m)+a(r)-max(a(l),a(m),a(r))-min(a(l),a(m),a(r))
    do
      do while (a(l) < p)
        l = l+1
      end do
      do while (a(r) > p)
        r = r-1
      end do
      if (l >= r) exit
      a(l) = xor(a(l),a(r))
      a(r) = xor(a(l),a(r))
      a(l) = xor(a(l),a(r))
      l = l+1
      r = r-1
    end do
    if (l-1 > 1) call quick_sort(a(1:l-1))
    if (n > r+1) call quick_sort(a(r+1:n))
  end
end program distinct_numbers