0부터 n까지 각 k에 대해 리스트 원소 k개에 양의 정수를 곱한 뒤 만들 수 있는 서로 다른 값의 최소 개수를 구한다.
정수 nnn개로 이루어진 목록 a1,a2,…,ana_1, a_2, \ldots, a_na1,a2,…,an이 주어진다. 한 번의 연산에서 목록의 원소 하나를 골라 임의의 양의 정수를 곱할 수 있다. 곱하는 수로 111을 골라도 된다.
0≤k≤n0 \le k \le n0≤k≤n인 모든 kkk에 대해, 연산을 kkk번 수행한 뒤 목록에 남을 수 있는 서로 다른 정수 개수의 최솟값을 구한다.
첫째 줄에 정수 nnn (1≤n≤3×1051 \le n \le 3 \times 10^51≤n≤3×105)이 주어진다.
둘째 줄에 정수 aia_iai (1≤ai≤1061 \le a_i \le 10^61≤ai≤106) nnn개가 공백으로 구분되어 주어진다.
한 줄에 정수 n+1n+1n+1개를 공백으로 구분해 출력한다. iii번째 정수는 연산을 i−1i-1i−1번 수행한 뒤 목록에 남을 수 있는 서로 다른 정수 개수의 최솟값이다.