생각역

1부터 N까지의 각 K에 대해 앞에서부터 K개씩 블록으로 나누고 남는 부분은 버린 뒤, 뒤집어서 같으면 같은 종류로 묶어 종류 수를 세고, 그 수가 최대가 되는 K를 모두 출력한다.

보통6문자열해시맵구현완전 탐색면접 대비아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

생각역으로 열차 한 대가 들어오고 있다. 이 열차는 차량 KK대를 이어 붙인 묶음을 여러 개 연결해서 만든다. 차량이 좌우 대칭이라 묶음을 뒤집어 연결해도 되므로, 어떤 묶음과 그 묶음을 뒤집은 것은 같은 종류로 본다.

지금은 열차의 머리부터 차량 NN대까지만 보이고, 보이는 차량의 색상은 모두 알고 있다.

열차를 구경하던 사람이 11 이상 NN 이하의 정수 KK를 하나 정한 다음, 보이는 차량을 머리 쪽부터 KK대씩 끊어 묶음으로 나눈다. 맨 뒤에 KK대를 채우지 못한 차량이 남으면 버린다. 이렇게 얻은 묶음 중에서 뒤집으면 일치하는 것끼리 한 종류로 묶었을 때, 서로 다른 종류가 몇 개인지 센다.

서로 다른 종류의 개수가 가장 많아지는 KK를 모두 구하라.

입력

첫째 줄에 보이는 차량의 수 NN이 주어진다. (1N20001 \le N \le 2000)

둘째 줄에 머리에서 가까운 순서대로 차량 NN대의 색상이 공백으로 구분되어 주어진다. 색상은 11 이상 10001000 이하의 정수이다.

출력

첫째 줄에 서로 다른 종류의 개수의 최댓값과 그 최댓값을 만드는 KK의 개수를 공백으로 구분해 출력한다.

둘째 줄에 그 KK를 오름차순으로 공백으로 구분해 출력한다.