def graycode(l,r): if l==1: return [0] if l==2: return [0,1] if l//2<=r: ret=graycode(l//2,r-l//2) ret=ret[::-1]+ret for i in range(l//2,l): ret[i]^=l//2 return ret else: ret=graycode(l//2,r) ret=ret+ret[::-1] for i in range(l//2,l): ret[i]^=l//2 return ret def nibeki(i): ret=1 while ret(((dp[i][j]<<1)+1)<<(il-1)): dp[i+1][j]=(((dp[i][j]<<1)+1)<<(il-1)) bef[i+1][j]=1 if j!=len(wp)-1: if dp[i][j+1]>(((dp[i][j]<<1)+1)<<(jl-1)): dp[i][j+1]=(((dp[i][j]<<1)+1)<<(jl-1)) bef[i][j+1]=2 arr=[] nx=len(hp)-1 ny=len(wp)-1 while nx>0 or ny>0: if bef[nx][ny]==1: arr.append(1) nx-=1 else: arr.append(2) ny-=1 arr=arr[::-1] order=[] for i in arr: if i==1: for j in hp[0]: order.append(j) hp=hp[1:] else: for j in wp[0]: order.append(j) wp=wp[1:] ans=[[0]*W for i in range(H)] for i in range(H): for j in range(W): v=pow(2,len(order)-1) for b,p in order: if p==0: if h[i]&b: ans[i][j]|=v else: if w[j]&b: ans[i][j]|=v v//=2 for i in ans: print(*i)