f=
->b,v,i{l=-1;i.map{|j|b[j]=[v[l+=1],b[j]]};b*?:}
test = [
[ [] ,[] ,[] ,[]],
[ [] ,[1] ,[0] ,[1] ],
[ [1,2] ,[] ,[], [1,2] ],
[ [1,2] ,[3] ,[0], [3,1,2] ],
[ [1,2] ,[3] ,[1] , [1,3,2] ],
[ [1,2] ,[3] ,[2] , [1,2,3] ],
[ [0,0,0] ,[1,1,1,1] ,[0,1,2,3] , [1,0,1,0,1,0,1] ],
[ [5,1,4,1,3] ,[0,0,7] ,[5,0,3] , [0,5,1,4,7,1,3,0] ],
[ [1,2,3,4] ,[4,3,2,1] ,[4,0,3,1] , [3,1,1,2,3,2,4,4] ],
]
def to_array(x)
x.split(/:+/).map(&:to_i)
end
test.each do |b,v,i,r|
puts to_array(f[b,v,i]) == r
end
Zj0KLT5iLHYsaXtsPS0xO2kubWFwe3xqfGJbal09W3ZbbCs9MV0sYltqXV19O2IqPzp9Cgp0ZXN0ID0gWwpbIFtdICxbXSAsW10gLFtdXSwKWyBbXSAsWzFdICxbMF0gLFsxXSBdLApbIFsxLDJdICxbXSAsW10sIFsxLDJdIF0sClsgWzEsMl0gLFszXSAsWzBdLCBbMywxLDJdIF0sClsgWzEsMl0gLFszXSAsWzFdICwgWzEsMywyXSBdLApbIFsxLDJdICxbM10gLFsyXSAsIFsxLDIsM10gXSwKWyBbMCwwLDBdICxbMSwxLDEsMV0gLFswLDEsMiwzXSAsIFsxLDAsMSwwLDEsMCwxXSBdLApbIFs1LDEsNCwxLDNdICxbMCwwLDddICxbNSwwLDNdICwgWzAsNSwxLDQsNywxLDMsMF0gXSwKWyBbMSwyLDMsNF0gLFs0LDMsMiwxXSAsWzQsMCwzLDFdICwgWzMsMSwxLDIsMywyLDQsNF0gXSwKXQoKZGVmIHRvX2FycmF5KHgpCiAgeC5zcGxpdCgvOisvKS5tYXAoJjp0b19pKQplbmQKCnRlc3QuZWFjaCBkbyB8Yix2LGkscnwKICBwdXRzIHRvX2FycmF5KGZbYix2LGldKSA9PSByCmVuZA==