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
ZGVmIGYobSx2KToKICAgIGZvciBpLHggaW4gZW51bWVyYXRlKHYpOnglPWxlbihtKTtyPW1baS8yXTttW2kvMl09clsteDpdK3JbOi14XTttPXppcCgqbSkKICAgIHJldHVybiBtCgojIFRlc3RzOgoKaSA9IFsoW1sxLDJdLFszLDRdXSxbMSwyLC0zLC0xXSksIChbWzEsMl0sWzMsNF1dLFsxLDEsMSwxXSksCiAgICAgKFtbMSwyXSxbMyw0XV0sWzAsMCwwLDBdKSwgKFtbMSwyLC0zXSxbLTQsNSw2XSxbNywtOCwwXV0sWzEsLTIsMCwtMSwzLDRdKSwKICAgICAoW1sxLDIsLTNdLFstNCw1LDZdLFs3LC04LDBdXSxbMywxMiwtMywwLC02LC0zXSldCnIgPSBbWygyLCAzKSwgKDQsIDEpXSwgWygzLCAyKSwgKDQsIDEpXSwgWygxLCAyKSwgKDMsIDQpXSwgWyg3LCA1LCAwKSwgKC0zLCAtOCwgMiksICgtNCwgMSwgNildLFsoMSwgMiwgLTMpLCAoLTQsIDUsIDYpLCAoNywgLTgsIDApXV0KCmZvciBwYWlyLCBvdXQgaW4gemlwKGkscik6IGFzc2VydCBmKCpwYWlyKSA9PSBvdXQ=