Question: Shifting between block

I have the following command (credit to @Carl Love ), this command will do certain bit shifting with the next block, and the last block will shift with the first block. 

B:= Matrix([[0,0,1,1,0,0,1], [0,0,1,1,1,0,0],[0,1,0,1,0,1,0], [1,0,0,1,1,1,0]]):
Bnew:= copy(B):
Bnew[[4,1,2,3], 3..5]:= B[.., 3..5]:
Bnew; 

May i know any command can help to reverse the shifting position between the block?

for example,

original block  [0,0,1,1,0,0,1], [0,0,1,1,1,0,0],[0,1,0,1,0,1,0], [1,0,0,1,1,1,0]

i need to shift the 3..5 position of block 1 and change to the 5..3 position of block 2. 

Example:

After shifting, 

Bnew=[0,0,1,1,1,0,1],[0,0,0,1,0,0,0],[0,1,1,1,0,1,0],[1,0,0,1,1,1,0]

Any command can help to solve? thank you in advance.

Please Wait...