띠 행렬의 LU 분해

삼중대각행렬을 대각 성분이 1인 하삼각행렬과 상삼각행렬의 곱으로 분해하고 분해가 불가능하면 -1을 출력합니다.

보통5행렬수학구현아직 제출이 없습니다시간 제한3초메모리 제한128 MB

문제

N×NN \times N 행렬 AA가 주어진다. LU 분해는 A=LUA = LU 꼴의 곱으로 나누는 것이다. LL은 하삼각행렬, UU는 상삼각행렬이다.

  • 하삼각행렬은 i<ji < j일 때 Lij=0L_{ij} = 0인 행렬이다.
  • 상삼각행렬은 i>ji > j일 때 Uij=0U_{ij} = 0인 행렬이다.

이 문제에서는 띠의 폭이 1인 띠 행렬만 다룬다. 즉 AA는 주대각선과 바로 위아래 대각선에만 값이 있고, 나머지 자리는 모두 0이다.

A=[b1c100a2b2c200an1bn1cn100anbn]A = \begin{bmatrix} b_1 & c_1 & 0 & \cdots & 0 \\ a_2 & b_2 & c_2 & \cdots & \vdots \\ 0 & \ddots & \ddots & \ddots & 0 \\ \vdots & \ddots & a_{n-1} & b_{n-1} & c_{n-1} \\ 0 & \cdots & 0 & a_n & b_n \end{bmatrix}

LL의 대각 성분이 모두 1이 되도록 하는 LLUU를 구한다. 이런 LLUU는 존재하면 하나뿐이다.

입력

첫째 줄에 정사각 행렬의 크기 NN (1N10001 \le N \le 1000)이 주어진다. 다음 NN개의 줄에 행렬 AA의 성분이 한 줄에 NN개씩 순서대로 주어진다.

모든 성분은 절댓값이 1000 이하인 정수이고, ij2|i - j| \ge 2인 자리의 성분은 항상 0이다. 분해가 존재하는 입력에서는 LLUU의 모든 성분의 절댓값이 10610^6 이하임이 보장된다.

출력

분해가 존재하고 UU의 대각 성분이 모두 0이 아니면, 먼저 NN개의 줄에 LL을 출력하고 이어서 NN개의 줄에 UU를 출력한다. 각 줄에는 그 행의 성분 NN개를 공백 하나로 구분해 적는다.

각 성분은 정확한 값을 소수 넷째 자리에서 반올림해 소수 셋째 자리까지 출력한다. 반올림은 0에서 먼 쪽으로 한다. 예를 들어 0.06250.06250.063, 0.0625-0.0625-0.063이 된다. 반올림한 값이 0이면 부호를 붙이지 않고 0.000으로 출력한다.

분해가 불가능하거나 UU의 대각 성분 중에 0이 있으면 첫째 줄에 -1만 출력한다.