# 1)
def f(n,i,j) :
    if i%2 == 0 :
        return n*i+j+1
    return n*(i+1)-j

# 2)
import numpy as np
def M(n) :
    return np.array([[f(n,i,j) for j in range(n)] for i in range(n)])
for n in range(1,6) : print(M(n))

# 3)
import numpy.linalg as alg
for n in range(1,11) :
    print(alg.matrix_rank(M(n)))

# 6)
import matplotlib.pyplot as plt
plt.plot([np.trace(M(k))/k**3 for k in range(2,99)])
plt.show()
