삼각형 수열

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

요약
각 수 i를 i개씩 삼각형으로 배치하되 이웃한 칸에 같은 수가 오지 않게 하고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 5점

유형
그리디, 구현, 배열
정답자
아직 제출이 없습니다

문제

당신에게는 11부터 NN까지의 정수가 있으며, 각 수 ii는 ii개씩 존재한다. 예를 들어 N=4N=4일 때, 11이 11개, 22가 22개, 33이 33개, 44가 44개 있다. 당신은 이 수들을 아래 그림과 같이 삼각형 모양으로 배치하려고 한다.

ii행의 jj번째 수를 (i,j)(i,j)로 표현했을 때, (i,j)(i,j)는 아래와 같은 조건에 의해 최대 66개의 다른 수와 인접해 있다.

  • i≥2i\ge 2 이고 j≥2j\ge 2 라면, (i−1,j−1)(i-1,j-1)와 인접해 있다.
  • i≥2i\ge 2 이고 j≤i−1j\le i-1 라면, (i−1,j)(i-1,j)와 인접해 있다.
  • j≥2j\ge 2 라면, (i,j−1)(i,j-1)와 인접해 있다.
  • j≤i−1j\le i-1 라면, (i,j+1)(i,j+1)와 인접해 있다.
  • i≤N−1i\le N-1 라면, (i+1,j)(i+1,j), (i+1,j+1)(i+1,j+1)와 인접해 있다.

이때 모든 수들에 대해서, 수에 인접해 있는 최대 66개의 수가 해당 수와 같지 않다면 이를 올바른 삼각형 수열이라고 한다. 인접한 수가 없을 경우, 해당 수는 자신과 같은 수가 인접하지 않다는 조건을 만족한 것으로 본다.

아래 그림에서, 왼쪽의 배치는 이를 만족하지 못하므로 올바른 삼각형 수열이 아니다. 반면, 오른쪽의 배치는 이를 만족하므로 올바른 삼각형 수열이 된다.

NN이 주어졌을 때, 올바른 삼각형 수열을 출력하라. 답이 여러 개 존재한다면 그중 아무거나 하나를 출력하라. 만약 그런 배치가 존재하지 않는다면 -1을 출력하라.

입력

첫 번째 줄에 정수 NN이 주어진다.

출력

NN개의 줄에 삼각형 수열을 이루는 수들을 공백으로 구분해 출력한다. ii번째 줄에는 그 줄에 속하는 ii개의 수들을 왼쪽부터 순서대로 출력한다.

만약 그런 배치가 존재하지 않는다면 대신 첫 번째 줄에 -1을 출력한다.

제한

  • 1≤N≤1,0001\le N\le 1\\, 000
  • 1≤i≤N1\le i\le N

예제2

  1. 예제 1

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

    입력
    3
    
    예상 출력
    -1