sub{$0[1]=[reverse+1..$_[0]];{sleep sub{system('clear');print$",join$",(map{ $==$_;map($0[$_][$=]||'|',1..3),$/}reverse+0..-1+pop)}->($_[0]);@1[1,3,2]=([ 2,3],[1,2],[1,3]);@{$0[3]}==$_[0]||sub{join('',$_[1]?$0[1][$#{$0[1]}]==1?$_[ 3]?($_[3],3):$_[2]?($_[2],2):($_[1],1):($_[1],1):$_[3]?$0[3][$#{$0[3]}]==1?$ _[1]?($_[1],1):$_[2]?($_[2],2):($_[3],3):($_[3],3):$_[2]?$0[2][$#{$0[2]}]==1 ?$_[1]?($_[1],1):$_[3]?($_[3],3):($_[2],2):($_[2],2):$|)=~/(.)(.)/;push@{$0[ $1]},pop@{$0[$2]}}->(0,sub{($0[1][$#{$0[1]}]?!$0[$1[1][@{$0[1]}%2]][$#{$0[$1 [1][@{$0[1]}%2]]}]?$1[1][@{$0[1]}%2]:$0[1][$#{$0[1]}]<$0[$1[1][@{$0[1]}%2]][ $#{$0[$1[1][@{$0[1]}%2]]}]?$1[1][@{$0[1]}%2]:$%:$,,$0[3][$#{$0[3]}]?!$0[$1[3 ][@{$0[3]}%2]][$#{$0[$1[3][@{$0[3]}%2]]}]?$1[3][@{$0[3]}%2]:$0[3][$#{$0[3]}] <$0[$1[3][@{$0[3]}%2]][$#{$0[$1[3][@{$0[3]}%2]]}]?$1[3][@{$0[3]}%2]:$,:$-,$0 [2][$#{$0[2]}]?!$0[$1[2][@{$0[2]}%2]][$#{$0[$1[2][@{$0[2]}%2]]}]?$1[2][@{$0[ 2]}%2]:$0[2][$#{$0[2]}]<$0[$1[2][@{$0[2]}%2]][$#{$0[$1[2][@{$0[2]}%2]]}]?$1[ 2][@{$0[2]}%2]:$-:$!)[($0,0..2)[1,3,2]]}->($@,@0[1,3,2]))&&redo}}->(pop||3);