def f(m,v):
    for i,x in enumerate(v):x%=len(m);r=m[i/2];m[i/2]=r[-x:]+r[:-x];m=zip(*m)
    return m

# Tests:

i = [([[1,2],[3,4]],[1,2,-3,-1]), ([[1,2],[3,4]],[1,1,1,1]),
     ([[1,2],[3,4]],[0,0,0,0]), ([[1,2,-3],[-4,5,6],[7,-8,0]],[1,-2,0,-1,3,4]),
     ([[1,2,-3],[-4,5,6],[7,-8,0]],[3,12,-3,0,-6,-3])]
r = [[(2, 3), (4, 1)], [(3, 2), (4, 1)], [(1, 2), (3, 4)], [(7, 5, 0), (-3, -8, 2), (-4, 1, 6)],[(1, 2, -3), (-4, 5, 6), (7, -8, 0)]]

for pair, out in zip(i,r): assert f(*pair) == out