import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();// 构造拉丁方阵int[][] matrix = new int[n][n];for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {matrix[i][j] = (i + j) % n + 1;}}// 计算每一行和每一列的异或和int minThreshold = 0;for (int i = 0; i < n; i++) {int rowXor = 0, colXor = 0;for (int j = 0; j < n; j++) {rowXor ^= matrix[i][j];colXor ^= matrix[j][i];}minThreshold = Math.max(minThreshold, Math.max(rowXor, colXor));}// 输出结果System.out.println(minThreshold);for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {System.out.print(matrix[i][j] + &quot; &quot;);}System.out.println();}}}