N0 = 11; A0 = 10; B0 = 2
N1 = 7; A1 = 4; B1 = 1
C1 = [None, 1, 3, 1, 1, 1, 3, 3, 3, 1, 3]
def mul(a,h,b,k):
    if a == b:
        return (a, (A1 * h + B1 * k) % N1)
    coef = C1[(a - b) % N0]
    return ((A0*a+B0*b) % N0, (h + coef * (k - h)) % N1)

mag = [[N1 * mul(a, h, b, k)[0] + mul(a, h, b, k)[1]
             for b in range(N0) for k in range(N1)]
            for a in range(N0) for h in range(N1)]
print(all(i == mag[j][mag[i][mag[mag[j][i]][j]]] for i in range(N0 * N1) for j in range(N0 * N1)))
print(all(len(set(mag[i])) == N0 * N1 for i in range(N0 * N1)))
#print([len(set(mag[j][i] for j in range(N0 * N1))) for i in range(N0 * N1)])
print(all(len(set(mag[j][i] for j in range(N0 * N1))) == 47 for i in range(N0 * N1)))
print(mag)

