렬정! 렬정! 렬정!

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

요약
배열이 주어질 때, 한 원소에서 다른 원소로 양의 값을 옮기는 연산을 floor(N/2)번 이하로 사용해 배열을 내림차순으로 만들고, 각 단계의 배열을 출력하거나 불가능하면 -1을 출력한다.
난이도

보통10점 중 7점

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

문제

원소의 순서만 바꾸던 기존 정렬 알고리즘을 공부하던 민석이는 모든 게 부질없음을 깨닫고 원소의 값을 바꿔서 정렬해 버리기로 했다.

길이 NN의 배열 AA가 주어진다. 아래의 연산을 00번 이상 ⌊N2⌋\left\lfloor\frac{N}{2}\right\rfloor번 이하로 사용하여 배열 AA의 모든 원소가 내림차순이 되도록 만들어 보자. 여기서 내림차순이란, 11 이상 N−1N-1 이하의 모든 정수 ii에 대하여 A_i≥A_i+1A\_{i}\geq A\_{i+1}을 만족하는 상태를 말한다.

  • 1≤i,j≤N1\leq i,j\leq N를 만족하는 서로 다른 두 정수 ii와 jj에 대하여 0\<x≤1060\<x\leq 10^6를 만족하는 정수 xx를 선택하여 A_iA\_{i}에 xx를 더하고, A_jA\_{j}에 xx를 뺀다.

입력

첫 번째 줄에 배열 AA의 길이를 나타내는 정수 NN이 주어진다. (1≤N≤1001\leq N\leq 100)

두 번째 줄에 AA의 원소 NN개가 공백으로 구분되어 주어진다. AA의 모든 원소는 11 이상 5,0005\\,000 이하의 정수이다.

출력

첫 번째 줄에 연산을 사용한 횟수 KK를 출력한다. KK가 최솟값일 필요가 없음에 유의하자.

이후 KK개의 줄에 걸쳐 각 연산이 완료된 배열 AA의 각 원소를 한 칸의 공백으로 구분하여 출력한다.

가능한 답이 여러 가지라면 그중 아무거나 출력한다.

만약 연산을 00번 이상 ⌊N2⌋\left\lfloor\frac{N}{2}\right\rfloor번 이하로 사용하여 배열 AA를 내림차순으로 만들 수 없다면, 첫 번째 줄에 -1을 출력한다.

힌트

⌊x⌋\left\lfloor x \right\rfloor는 xx를 초과하지 않는 가장 큰 정수를 말한다. 예를 들어 ⌊2.5⌋=2\left\lfloor 2.5 \right\rfloor=2이고, ⌊3⌋=3\left\lfloor 3 \right\rfloor=3이다.

예제3

  1. 예제 1

    입력
    5
    30 70 50 60 10
    
    예상 출력
    1
    80 70 50 10 10
    
  2. 예제 2

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

    입력
    4
    1 2 3 4
    
    예상 출력
    2
    6 2 -2 4
    6 2 2 0