#!/usr/bin/env python

__author__ = "bt3"

def rotate_NxN(m):
    n = len(m)
    for layer in range(n//2):
        first = layer
        last = n - 1 - layer
        for i in range(first, last):
            offset = i - first
            top = m[first][i]
            m[first][i] = m[last-offset][first]
            m[last-offset][first] = m[last][last-offset]
            m[last][last-offset] = m[i][last]
            m[i][last] = top
    return m



def main():
    m = [[1,2],[3,4]]
    mr = [[3,1],[4,2]]
    assert(rotate_NxN(m) == mr)
    m2 = [[1,2,3],[4,5,6],[7,8,9]]
    print(rotate_NxN(m2))

if __name__ == '__main__':
    main()