using System.Collections.Generic;
static readonly int[,] MATRIX = new int[,] {
public static void Main(string[] args)
int[,] rot90 = rotate(MATRIX);
int[,] rot180 = rotate(rot90);
int[,] rot270 = rotate(rot180);
public static void print(int[,] matrix)
for(int i = 0; i < matrix.GetLength(0); ++i)
for(int j = 0; j < matrix.GetLength(1); ++j)
Console.Write("{0,3}", matrix[i, j]);
public static int[,] rotate(int[,] matrix)
return flipHorizontal(transpose(matrix));
public static int[,] transpose(int[,] matrix)
int R = matrix.GetLength(0);
int C = matrix.GetLength(1);
int[,] trans = new int[C, R];
for(int i = 0; i < R; ++i)
for(int j = 0; j < C; ++j)
trans[j, i] = matrix[i, j];
public static int[,] flipHorizontal(int[,] matrix)
int R = matrix.GetLength(0);
int C = matrix.GetLength(1);
int[,] flipped = new int[R, C];
for(int i = 0; i < R2; ++i)
Array.Copy(matrix, i * C, flipped, (R - i - 1) * C, C);
Array.Copy(matrix, (R - i - 1) * C, flipped, i * C, C);
Array.Copy(matrix, R2 * C, flipped, R2 * C, C);