#!/usr/bin/ python3.8 import sys read = sys.stdin.buffer.read readline = sys.stdin.buffer.readline readlines = sys.stdin.buffer.readlines import numpy as np class Fq(int): deg = 2 irr_poly = 7 @classmethod def set_degree(cls, d): cls.deg = d cls.irr_poly = [1, 2, 7, 11, 19][d] @classmethod def iter_all(cls): return (Fq(i) for i in range(1 << cls.deg)) def __add__(self, other): return Fq(self ^ other) def __mul__(self, other): ret = 0 d = self.__class__.deg p = self.__class__.irr_poly for i in range(d): if (other >> i) & 1: ret ^= self << i for i in range(d - 2, -1, -1): if ret & (1 << d + i): ret ^= p << i return Fq(ret) N, X, Y, Z = map(int, read().split()) X, Y = Y - 1, X - 1 Z -= 1 Fq.set_degree(N.bit_length() - 1) nums = np.array(list(Fq.iter_all()), dtype=object) latine_1, latine_2 = (nums[None, :, None] + nums[2:4][:, None, None] * nums[None, None, :]).astype(int) latine_1 += (Z // N) - latine_1[X, Y] latine_1 %= N latine_2 += (Z % N) - latine_2[X, Y] latine_2 %= N magic_square = latine_1 * N + latine_2 + 1 print('\n'.join(' '.join(row) for row in magic_square.astype(str)))