!제곱수 순열

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

요약
각 N에 대해 1부터 N까지를 한 번씩 써서 이웃한 두 수의 합이 제곱수가 되지 않도록 배열하거나, 불가능하면 -1을 출력한다.
난이도

어려움10점 중 8점

유형
그리디, 그래프, 수학
정답자
아직 제출이 없습니다

문제

팔마는 제곱수 순열 문제를 풀기로 했다. 며칠을 투자해도 문제가 잘 풀리지 않아서 열을 받은 팔마는 문제 일부를 몰래 고친 다음 제곱수 순열 문제를 푼 척할 것이다.

11부터 NN까지의 정수를 한 번씩만 사용하여 다음 조건을 만족하는 수열 A_1A\_1, A_2A\_2, ⋯\cdots, A_NA\_N을 구해보자.

  • A_i+A_i+1A\_i + A\_{i + 1}은 제곱수가 아니다. (1≤i<N)(1 \le i \lt N)

입력

총 TT개의 테스트 케이스가 입력으로 주어지며, 첫 번째 줄에 TT가 주어진다.

그다음 줄부터 각 테스트 케이스마다 하나의 줄에 정수 NN이 주어진다.

출력

각 테스트 케이스마다 주어진 순서대로 다음과 같이 출력한다.

  • 조건을 만족하는 수열이 있다면, 첫 번째 줄에 수열 A_1A\_1, A_2A\_2, ⋯\cdots, A_NA\_N을 공백으로 구분하여 출력한다. 가능한 수열이 여러 개라면 그중 아무것이나 출력한다.
  • 조건을 만족하는 수열이 없다면, 첫 번째 줄에 -1을 출력한다.

제한

  • 1≤T≤5,0001 \le T \le 5\\,000
  • 2≤N≤1,000,0002 \le N \le 1\\,000\\,000
  • 모든 테스트 케이스의 NN의 합은 1,000,0001\\,000\\,000을 넘지 않는다.

예제1

  1. 예제 1

    입력
    4
    4
    6
    8
    12
    
    예상 출력
    2 3 4 1
    5 3 2 4 6 1
    6 8 5 1 4 7 3 2
    1 4 7 10 2 5 8 11 3 9 6 12