OKEA (Codeforces 1634C)
Tags: Others, constructive algorithms

People worry that computers will get too smart and take over the world, but the real problem is that they're too stupid and they've already taken over the world.— Pedro DomingosYou work for a well-known department store that uses leading technologies and employs mechanistic work — that is, robots!The department you work in sells $$$n \cdot k$$$ items. The first item costs $$$1$$$ dollar, the second item costs $$$2$$$ dollars, and so on: $$$i$$$-th item costs $$$i$$$ dollars. The items are situated on shelves. The items form a rectangular grid: there are $$$n$$$ shelves in total, and each shelf contains exactly $$$k$$$ items. We will denote by $$$a_{i,j}$$$ the price of $$$j$$$-th item (counting from the left) on the $$$i$$$-th shelf, $$$1 \le i \le n, 1 \le j \le k$$$.Occasionally robots get curious and ponder on the following question: what is the mean price (arithmetic average) of items $$$a_{i,l}, a_{i,l+1}, \ldots, a_{i,r}$$$ for some shelf $$$i$$$ and indices $$$l \le r$$$? Unfortunately, the old robots can only work with whole numbers. If the mean price turns out not to be an integer, they break down.You care about robots' welfare. You want to arrange the items in such a way that the robots cannot theoretically break. Formally, you want to choose such a two-dimensional array $$$a$$$ that:  Every number from $$$1$$$ to $$$n \cdot k$$$ (inclusively) occurs exactly once.  For each $$$i, l, r$$$, the mean price of items from $$$l$$$ to $$$r$$$ on $$$i$$$-th shelf is an integer. Find out if such an arrangement is possible, and if it is, give any example of such arrangement.

Input: The first line contains a single integer $$$t$$$ ($$$1 \le t \le 500$$$) — the number of test cases.The first and only line of each test case contains two integers $$$n$$$ and $$$k$$$ ($$$1 \le n, k \le 500$$$) — the number of shelves and length of each shelf, respectively.It is guaranteed that the sum $$$n$$$ over all test cases does not exceed $$$500$$$ and the sum $$$k$$$ over all test cases does not exceed $$$500$$$.

Output: Print the answer for each test case.If such an arrangement exists, print "YES" on a single line. After that, print any example on $$$n$$$ lines of $$$k$$$ numbers each, one line per shelf. Each number from $$$1$$$ to $$$n \cdot k$$$ must occur exactly once in the output.If no good arrangement exists, print a single word "NO" on its own line.


Sample Inputs:
4
1 1
2 2
3 3
3 1

Sample Outputs:
YES
1 
YES
1 3 
2 4 
NO
YES
1 
2 
3

Solution (Python):
def Ye():
    print('Yes')

def No():
    print('No')

def pl(li):
    for i in li:
        print(i, end=' ')

def solve():
    (n, k) = list(map(int, input().split()))
    if k == 1 or n % 2 == 0:
        Ye()
        for i in range(n):
            print(' '.join(map(str, [1 + i + j * n for j in range(k)])))
    else:
        No()
    return 0
TT = int(input())
while TT:
    solve()
    TT -= 1

Solution (Python):
for t in range(int(input())):
    (n, k) = [*map(int, input().split())]
    if k != 1 and n % 2:
        print('NO')
        continue
    print('YES')
    for i in range(n):
        s = i // 2 * k * 2 + (2 if i % 2 else 1)
        print(' '.join([str(x) for x in range(s, s + 2 * (k - 1) + 1, 2)]))

Solution (Python):
import sys
fin = sys.stdin

def solve(n, k):
    if k == 1:
        answer = '\n'.join(map(str, range(1, n + 1)))
        return f'YES\n{answer}'
    elif n == 1:
        return 'NO'
    elif n % 2 == 0:
        answer = ['YES']
        for i in range(0, n, 2):
            start = i * k + 1
            end = i * k + 2 * k + 1
            answer.append(' '.join(map(str, range(start, end, 2))))
            answer.append(' '.join(map(str, range(start + 1, end, 2))))
        return '\n'.join(answer)
    return 'NO'
t = int(fin.readline())
for test in range(t):
    (n, k) = map(int, fin.readline().split())
    print(solve(n, k))