오마르의 버그

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

오마르는 세계에서 가장 어린 프로그래머다. 태어난 지 11개월밖에 되지 않았다. 이진 탐색 설명을 읽고 직접 구현해 보기로 했다.

오마르가 작성한 함수는 다음과 같다. 문법은 올바르고, C++와 Java에서 똑같이 동작한다.

int findFirstGreaterThanOrEqual(int array[], int N, int X) {
    int start = 0, end = N;
    while (start < end) {
        int middle = (start + end) / 2;
        if (array[middle] > X) {
            end = middle;
        } else {
            start = middle + 1;
        }
    }
    return start;
}

이 함수는 항상 다음 조건을 모두 만족하는 인자로 호출된다.

  1. 첫 번째 인자는 정수를 1개 이상 99개 이하 담은 배열이다.
  2. 배열의 정수는 서로 다르고, 증가하는 순서로 정렬되어 있다.
  3. 배열의 정수는 모두 양수이고 100 이하다.
  4. NN은 배열의 원소 개수다.
  5. XX는 100 이하의 양의 정수다.

오마르가 원하는 동작은 이렇다. 배열에 XX보다 크거나 같은 정수가 없으면 함수는 NN을 반환한다. 그렇지 않으면 XX보다 크거나 같은 정수 중 가장 작은 값의 인덱스를 반환한다. 첫 번째 원소의 인덱스는 0이다.

그런데 함수에 버그가 있어서 어떤 입력에서는 잘못된 값을 반환한다. 오마르는 너무 어려서 버그를 찾지 못한다. 함수를 시험할 배열을 만들어 오마르를 도와주자.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다 (1T1001 \le T \le 100).

이어지는 TT개의 줄에 테스트 케이스가 한 줄씩 주어진다. 각 줄에는 공백 하나로 구분된 정수 세 개 NN XX YY가 있다 (1N991 \le N \le 99, 1X1001 \le X \le 100, 1Y21 \le Y \le 2). NN은 두 번째 인자의 값이고 XX는 세 번째 인자의 값이다. YY가 1이면 그 인자로 함수를 호출했을 때 올바른 값을 반환하게 하는 배열을 만들어야 한다. YY가 2이면 잘못된 값을 반환하게 하는 배열을 만들어야 한다. 어느 쪽이든 배열은 위 조건을 만족해야 한다.

올바른 값인지 잘못된 값인지는 코드가 실제로 하는 동작이 아니라 오마르가 원하는 동작을 기준으로 판단한다.

출력

각 테스트 케이스마다 만든 배열의 정수 NN개를 배열에 놓인 순서대로 공백 하나로 구분해 한 줄에 출력한다. 조건을 만족하는 배열이 여러 개면 사전순으로 가장 앞선 것을 출력한다.

길이가 같은 두 배열을 비교할 때, 처음으로 값이 달라지는 인덱스에 더 작은 값이 놓인 배열이 사전순으로 앞선다.