만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

신탁

시간 제한3초메모리 제한1024 MB

요약
홀수 길이의 수열에서 홀수 길이 구간을 그 구간의 중앙값으로 바꾸는 과정을 반복할 때, 최종으로 남을 수 있는 모든 값을 구합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 구간, 정렬
정답자
아직 제출이 없습니다

문제

신탁이란 신이 자신의 뜻을 순례자에게 전달하려는 것이다. 그러므로 신탁을 이해하는 것은 순례자의 기본 소양이다.

신탁을 이루는 문자는 1에서 88888888 사이에 있는 88888888가지 정수다. 즉, 123도 하나의 문자이고 88888888도 하나의 문자다. 하나의 문자는 하나의 뜻을 가진다.

신탁은 홀수 개 문자의 나열이다. 신탁을 해석하는 방법은 신탁에 변환을 거듭 적용해 문자 하나만 남기는 것이다. 마지막에 남은 문자가 신탁의 뜻이 된다. 변환 순서에 따라 마지막에 남는 문자가 달라질 수 있으므로, 신탁은 여러 뜻을 가질 수 있다.

변환은 다음과 같이 한다.

  1. 연속된 홀수 개의 문자를 선택하고 신탁에서 지운다.
  2. 선택된 문자들을 그 문자를 나타내는 정수의 오름차순으로 정렬했을 때 가장 가운데에 오는 문자를 구한다.
  3. 1번 단계에서 문자들을 지운 위치에 2번 단계에서 구한 문자를 다시 넣는다.

예를 들어 [3,3,1,1,2,1,1]이라는 신탁이 있다고 하자. 이 신탁을 읽는 방법은 다음과 같다. [3,3,1,1,2,1,1] →\rightarrow [1], 그리고 [3,3,1,1,2,1,1] →\rightarrow [3,3,1] →\rightarrow [3]. 놀랍게도 이 신탁을 2로 해석하는 방법은 존재하지 않는다. 따라서 [3,3,1,1,2,1,1]는 1 또는 3으로 해석될 수 있다. 주어진 신탁이 해석될 수 있는 뜻을 모두 구하라.

입력

첫 번째 줄에, 신탁의 개수를 나타내는 자연수 TT가 주어진다.

그다음 줄부터 각 신탁마다 두 줄이 주어진다.

첫 번째 줄에는 신탁의 길이를 나타내는 자연수 NN이 주어진다.

두 번째 줄에는 신탁을 이루는 NN개의 정수 c1,c2,⋯ ,cNc_1, c_2, \cdots, c_N (1≤ci≤88 888 8881\leq c_i \leq 88\ 888\ 888)이 주어진다.

출력

각 신탁에 대해 두 줄을 출력한다. 주어진 신탁이 KK 종류의 문자로 해석될 수 있다면, 첫 번째 줄에 KK를 출력한다.

해석 결과로 가능한 서로 다른 KK개의 문자를 정수의 오름차순으로 C1,C2,⋯ ,CKC_1, C_2, \cdots, C_K라고 할 때, 두 번째 줄에 C1,C2,⋯ ,CKC_1, C_2, \cdots, C_K를 공백으로 구분하여 출력한다.

예제3

  1. 예제 1

    입력
    1
    7
    3 3 1 1 2 1 1
    
    예상 출력
    2
    1 3
    
  2. 예제 2

    입력
    2
    7
    1 2 4 5 3 6 7
    11
    8 1 6 2 1 5 100 5 4 7 3
    
    예상 출력
    4
    2 4 5 6
    3
    3 4 5
    
  3. 예제 3

    입력
    1
    1
    88888888
    
    예상 출력
    1
    88888888