Given an integer **N**, the task is to construct a matrix **M[][]** of size **N x N** with numbers in the range **[1, N^2] **with the following conditions :

- The elements of the matrix M should be an integer between 1 and N^2.
- All elements of the matrix M are pairwise distinct.
- For each square submatrix containing cells in row r through r+a and in columns c through c+a(inclusive) for some valid integers r,c and a>=0: M(r,c)+M(r+a,c+a) is even and M(r,c+a)+M(r+a,c) is even.

**Examples:**

Input:N = 2Output:

1 2

4 3Explanation:

This matrix has 5 square submatrix and 4 of them ([1], [2], [3], [4]) have a=0 so they satisfy the conditions.

The last square submatrix is the whole matrix M where r=c=a=1. We can see that M_{(1, 1)}+M_{(2, 2)}=1+3=4 and M_{(1, 2)}+M_{(2, 1)}=2+4=6 are both even.Input:N = 4Output:

1 2 3 4

8 7 6 5

9 10 11 12

16 15 14 13

**Approach:** We know that the sum of two numbers is even when their parity is the same. Let us say the parity of **M _{(i, j)}** is odd that means the parity of

**M**has to be odd.

_{(i+1, j+1)}, M_{(i+1, j-1)}, M_{(i-1, j+1)}, M_{(i-1, j-1)}Below is the illustration for N = 4 to generate a matrix of size 4×4:

So from the above illustration we have to fill the matrix in the Checkerboard Pattern. We can fill it in two ways:

- All black cells have an odd integer and white cells have an even integer.
- All black cells have an even integer and white cells have an odd integer.

Below is the implementation of the above approach:

## C++

`// C++ program for the above approach ` `#include<bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to print the desired matrix ` `void` `UniqueMatrix(` `int` `N) ` `{ ` ` ` `int` `element_value = 1; ` ` ` `int` `i = 0; ` ` ` ` ` `// element_value will start from 1 ` ` ` `// and go up to N ^ 2 ` ` ` ` ` `// i is row number and it starts ` ` ` `// from 0 and go up to N-1 ` ` ` ` ` `// Iterate ove all [0, N] ` ` ` `while` `(i < N) ` ` ` `{ ` ` ` ` ` `// If is even ` ` ` `if` `(i % 2 == 0) ` ` ` `{ ` ` ` `for` `(` `int` `f = element_value; ` ` ` `f < element_value + N; f++) ` ` ` `{ ` ` ` ` ` `// If row number is even print ` ` ` `// the row in forward order ` ` ` `cout << f << ` `" "` `; ` ` ` `} ` ` ` `element_value += N; ` ` ` `} ` ` ` `else` ` ` `{ ` ` ` `for` `(` `int` `k = element_value + N - 1; ` ` ` `k > element_value - 1; k--) ` ` ` `{ ` ` ` ` ` `// If row number is odd print ` ` ` `// the row in reversed order ` ` ` `cout << k << ` `" "` `; ` ` ` ` ` `} ` ` ` `element_value += N; ` ` ` `} ` ` ` `cout << endl; ` ` ` `i = i + 1; ` ` ` `} ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` ` ` `// Given matrix size ` ` ` `int` `N = 4; ` ` ` ` ` `// Function call ` ` ` `UniqueMatrix(N); ` `} ` ` ` `// This code is contributed by chitranayal ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program for the above approach ` ` ` `# Function to print the desired matrix ` `def` `UniqueMatrix(N): ` ` ` ` ` `element_value ` `=` `1` ` ` `i ` `=` `0` ` ` ` ` `# element_value will start from 1 ` ` ` `# and go up to N ^ 2 ` ` ` ` ` `# i is row number and it starts ` ` ` `# from 0 and go up to N-1 ` ` ` ` ` `# Iterate ove all [0, N] ` ` ` `while` `(i < N): ` ` ` ` ` `# If is even ` ` ` `if` `(i ` `%` `2` `=` `=` `0` `): ` ` ` ` ` `for` `f ` `in` `range` `(element_value, element_value ` `+` `N, ` `1` `): ` ` ` ` ` `# If row number is even print ` ` ` `# the row in forward order ` ` ` `print` `(f, end ` `=` `' '` `) ` ` ` `element_value ` `+` `=` `N ` ` ` ` ` `else` `: ` ` ` ` ` `for` `k ` `in` `range` `(element_value ` `+` `N` `-` `1` `, element_value` `-` `1` `, ` `-` `1` `): ` ` ` ` ` `# if row number is odd print ` ` ` `# the row in reversed order ` ` ` `print` `(k, end ` `=` `' '` `) ` ` ` ` ` `element_value ` `+` `=` `N ` ` ` ` ` `print` `() ` ` ` `i ` `=` `i ` `+` `1` ` ` ` ` `# Driver Code ` ` ` `# Given Matrix Size ` `N ` `=` `4` ` ` `# Function Call ` `UniqueMatrix(N) ` |

*chevron_right*

*filter_none*

**Output:**

1 2 3 4 8 7 6 5 9 10 11 12 16 15 14 13

**Time Complexity:** O(N^2) **Auxiliary Space:** O(N^2)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Circular Matrix (Construct a matrix with numbers 1 to m*n in spiral way)
- Construct a unique matrix n x n for an input n
- Construct a square Matrix whose parity of diagonal sum is same as size of matrix
- Print squares of first n natural numbers without using *, / and -
- Print all increasing sequences of length k from first n natural numbers
- Sum of cubes of first n odd natural numbers
- Find m-th summation of first n natural numbers.
- Program to find sum of first n natural numbers
- Program for cube sum of first n natural numbers
- Sum of all subsets of a set formed by first n natural numbers
- Sum of squares of first n natural numbers
- Sum of squares of first n natural numbers
- Difference between sum of the squares of first n natural numbers and square of sum
- Find the average of first N natural numbers
- Sum of fourth powers of the first n natural numbers
- Sum of fifth powers of the first n natural numbers
- Sum of fourth power of first n even natural numbers
- Sum of fourth powers of first n odd natural numbers
- Average of first n even natural numbers
- Possible two sets from first N natural numbers difference of sums as D

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.