홀수 길이 수열에서 임의의 홀수 길이 연속 구간을 그 중앙값으로 바꾸는 연산을 반복할 때 마지막에 남을 수 있는 문자를 모두 구한다.
어려움8수학분할 정복그리디조합론아직 제출이 없습니다시간 제한3초메모리 제한1024 MB신탁이란 신이 자신의 의지를 순례자에게 전달하려는 것이고, 그렇기에 신탁을 이해하는 것은 순례자들의 기본 소양이다.
신탁을 이루는 문자는 1에서 88888888 사이에 있는 88888888가지 정수다. 즉, 123도 하나의 문자가 되고, 88888888도 하나의 문자가 된다. 하나의 문자는 하나의 뜻을 가지고 있다.
신탁은 홀수개 문자의 나열이다. 신탁을 해석하는 방법은 신탁에 변환을 거듭해서 단 하나의 문자만 남기는 것이고, 남겨진 문자가 신탁의 뜻이 된다. 신탁을 변환하는 순서에 따라 마지막에 남는 문자의 종류가 달라질 수 있기 때문에, 신탁은 여러 뜻을 가질 수 있다.
신탁을 변환하는 법은 다음과 같다.
예를 들어, [3,3,1,1,2,1,1]이라는 신탁이 있다고 하자. 이 신탁을 읽는 예를 들어 보면,
[3,3,1,1,2,1,1] → [1][3,3,1,1,2,1,1] → [3,3,1] → [3]등이 방법이 있다. 그리고 놀랍게도 이 신탁을 2로 해석하는 방법은 존재하지 않는다. 그래서, [3,3,1,1,2,1,1]라는 신탁은 1 또는 3으로 해석될 수 있다. 주어진 신탁이 어떤 뜻으로 해석될 수 있는지 모두 구하여라.
첫 번째 줄에, 신탁의 개수를 나타내는 자연수 T가 주어진다.
그다음 줄부터 각 신탁마다 두 개의 줄이 입력으로 주어진다:
첫 번째 줄에, 신탁의 길이를 나타내는 자연수 N이 주어진다.
두 번째 줄에, 신탁의 구성을 나타내는 N 개의 정수 c_1,c_2,⋯,c_N (1≤c_i≤88 888 888)가 주어진다.
T 개의 신탁 각각에 대해 두 개의 줄을 출력한다:
주어진 신탁이 K 종류의 문자로 해석될 수 있다면, 첫 번째 줄에 K를 출력한다.
해석 결과로 가능한 서로 다른 K 개의 문자를 정수의 오름차순으로 C_1,C_2,⋯,C_K라고 할 때, 두 번째 줄에 C_1,C_2,⋯,C_K를 공백으로 구분하여 출력한다.