해결한 사람
0
명
정답률
0.00
%
시간 제한
2000
ms
메모리 제한
245
MB
학생들은 시험을 치르기 위해 교실에 들어와 어떤 방식으로 자리에 앉았다. 선생님은 이렇게 생각했다. "아마 서로의 답안을 베끼려고 이 순서로 앉았을 것이다. 원래 이웃이었던 학생들이 새로운 자리 배치에서는 이웃이 아니도록 학생들을 재배치해야겠다."
교실은 n개의 행과 m개의 열로 이루어진 행렬로 나타낼 수 있으며, 각 칸에 학생 한 명이 있다. 두 학생이 앉은 칸이 한 변을 공유하면 두 학생은 이웃이다.
학생들에게 행 순서대로 1부터 n·m까지 번호를 매기자. 그러면 처음에 i행 j열의 칸에 앉은 학생의 번호는 (i - 1)·m + j이다. 1부터 n·m까지의 모든 수가 정확히 한 번씩 등장하고 원래 행렬에서 인접했던 번호들이 이 행렬에서는 인접하지 않는, n개의 행과 m개의 열로 이루어진 행렬을 찾거나 그러한 행렬이 없다고 판단해야 한다.
유일한 줄에 두 정수 n와 m (1 ≤ n, m ≤ 105; n·m ≤ 105)이 주어진다. 이는 필요한 행렬의 행 개수와 열 개수이다.
그러한 행렬이 없다면 "NO"를 출력한다(따옴표 제외).
그렇지 않다면 첫째 줄에 "YES"를 출력하고(따옴표 제외), 다음 n개의 줄에 필요한 행렬을 이루는 m개의 정수를 출력한다.
2 1
NO
2 4
YES
2 4 1 3
7 5 8 6
첫 번째 테스트 케이스에서 행렬의 초기 모습은 다음과 같다.
1 2 3 4
5 6 7 8
두 행렬 모두에서 서로 인접한 두 학생이 없다는 것을 쉽게 알 수 있다.
두 번째 테스트 케이스에서는 가능한 자리 배치가 두 가지뿐이며, 두 배치 모두에서 번호가 1과 2인 학생들이 이웃이다.