K=->a,b{A,B=a,b;(0...A*B).each{|i|Z[[i]]};p"NOT POSSIBLE"}
Z=->v{c=v.last
abort (0...v.size).map{|i|{:i=>i+1,:x=>v[i]}}.sort_by{|i|i[:x]}.map{|i|i[:i]}.each_slice(B).map{|r|r*' '}*?\n if v.size==A*B
([[1,2],[2,1]].map{|l|[-1,1].repeated_permutation(2).map{|s|o=(c/B)+l[0]*s[0]
u=(c%B)+l[1]*s[1]
(o>=0&&0<=u&&A>o&&B>u)?o*B+u :-1}}.flatten-[-1]-v).each{|i|Z[v+[i]]}}
K[4,5]
Sz0tPmEsYntBLEI9YSxiOygwLi4uQSpCKS5lYWNoe3xpfFpbW2ldXX07cCJOT1QgUE9TU0lCTEUifQpaPS0+dntjPXYubGFzdAphYm9ydCAoMC4uLnYuc2l6ZSkubWFwe3xpfHs6aT0+aSsxLDp4PT52W2ldfX0uc29ydF9ieXt8aXxpWzp4XX0ubWFwe3xpfGlbOmldfS5lYWNoX3NsaWNlKEIpLm1hcHt8cnxyKicgJ30qP1xuIGlmIHYuc2l6ZT09QSpCCihbWzEsMl0sWzIsMV1dLm1hcHt8bHxbLTEsMV0ucmVwZWF0ZWRfcGVybXV0YXRpb24oMikubWFwe3xzfG89KGMvQikrbFswXSpzWzBdCnU9KGMlQikrbFsxXSpzWzFdCihvPj0wJiYwPD11JiZBPm8mJkI+dSk/bypCK3UgOi0xfX0uZmxhdHRlbi1bLTFdLXYpLmVhY2h7fGl8Wlt2K1tpXV19fQoKS1s0LDVd