구슬
시간 제한1초메모리 제한128 MB
구슬 문자열을 크기 k의 블록으로 나누고 남는 부분은 버릴 때, 블록과 그 역순을 같은 것으로 볼 때 서로 다른 블록 수를 최대로 하는 k를 구한다.
문제
바이테아사르는 목걸이를 만들기로 했다. 그래서 색색의 산호 구슬이 길게 꿰어진 줄 하나를 아주 싼 값에 사들였다. 그에게는 양의 정수 ()를 정하면 그 줄을 앞에서부터 구슬 개씩 연속된 조각으로 잘라 주는 기계도 있다. 즉 첫 번째 조각은 번 구슬, 두 번째 조각은 번 구슬, 이런 식으로 이어진다. 전체 구슬 수가 의 배수가 아니면, 마지막에 남는 (길이가 보다 짧은) 조각은 버린다. 각 구슬의 색은 양의 정수로 나타낸다.
다양함을 좋아하는 바이테아사르는 잘라 낸 조각들 가운데 서로 다른 조각이 가장 많아지도록 를 고르고 싶다. 줄 전체에는 정해진 시작과 끝이 있으며, 이 두 끝은 서로 바꿀 수 없다. 기계는 항상 시작 쪽에서부터 자른다. 다만 잘라 낸 한 조각 안에서는 양쪽 끝을 서로 바꿀 수 있어서, 조각을 어느 방향으로 읽어도 같은 것으로 본다. 예를 들어 조각 과 은 같은 조각이다. 바이테아사르를 위해 최적의 값을 구하는 프로그램을 작성하라.
입력
첫째 줄에 줄에 꿰어진 구슬의 개수 ()이 주어진다. 둘째 줄에는 시작 쪽부터 차례대로 각 구슬의 색을 나타내는 양의 정수 개 ()이 공백 하나로 구분되어 주어진다.
출력
첫째 줄에 두 정수를 공백 하나로 구분하여 출력한다. 하나는 를 어떻게 고르든 얻을 수 있는 서로 다른 조각 수의 최댓값이고, 다른 하나는 그 최댓값을 이루는 값의 개수 이다. 둘째 줄에는 그러한 값 개를 오름차순으로 공백 하나로 구분하여 출력한다.