require 'minitest/autorun'
F=->d,l{
i=0
t=d.map{|x|[x,d.size-(i+=1)]}
r=[]
d.cycle.map{|n|
t==[]&&break
(c=t.find{|x,_|x==n})&&(s=n
w=c[1]
o=p
(a=(t-[c]).map{|_,p|p%l}
s-=1;w+=1
a&[w%l]==[]?(o=p;c[1]=w):o||s-=o=1)while s>0
c[1]>=n*l&&(t.delete c;r<<n))}
r}
describe '#F' do
# break
def test_case_1
assert_equal [3], F[[3], 2]
end
def test_case_2
assert_equal [9, 5], F[[9, 5], 3]
end
def test_case_3
assert_equal [2, 9, 5], F[[5, 9, 2], 6]
end
def test_case_4
assert_equal [5, 9, 2], F[[5, 9, 2], 10]
end
def test_case_5
assert_equal [1, 5, 7, 8, 2], F[[5, 7, 8, 1, 2], 10 ]
end
def test_case_6
assert_equal [1, 6, 8, 2, 3, 5], F[[5, 1, 6, 8, 3, 2], 17 ]
end
def test_case_7
assert_equal [1, 7, 8, 9, 2, 3], F[[1, 2, 3, 7, 8, 9], 15 ]
end
def test_case_8
assert_equal [8, 7, 9, 1, 2, 3], F[[9, 8, 7, 3, 2, 1], 15 ]
end
def test_case_9
assert_equal [1, 2, 3, 4, 5, 6, 7, 8, 9], F[[1, 2, 3, 4, 5, 6, 7, 8, 9], 20 ]
end
def test_case_10
assert_equal [8, 7, 5, 9, 6, 1, 2, 4, 3], F[[9, 8, 7, 6, 5, 4, 3, 2, 1], 20 ]
end
end
cmVxdWlyZSAnbWluaXRlc3QvYXV0b3J1bicKCkY9LT5kLGx7Cmk9MAp0PWQubWFwe3x4fFt4LGQuc2l6ZS0oaSs9MSldfQpyPVtdCmQuY3ljbGUubWFwe3xufAp0PT1bXSYmYnJlYWsKKGM9dC5maW5ke3x4LF98eD09bn0pJiYocz1uCnc9Y1sxXQpvPXAKKGE9KHQtW2NdKS5tYXB7fF8scHxwJWx9CnMtPTE7dys9MQphJlt3JWxdPT1bXT8obz1wO2NbMV09dyk6b3x8cy09bz0xKXdoaWxlIHM+MApjWzFdPj1uKmwmJih0LmRlbGV0ZSBjO3I8PG4pKX0Kcn0KCmRlc2NyaWJlICcjRicgZG8KICAjIGJyZWFrIAogIGRlZiB0ZXN0X2Nhc2VfMQogICAgYXNzZXJ0X2VxdWFsIFszXSwgRltbM10sIDJdCiAgZW5kCgogIGRlZiB0ZXN0X2Nhc2VfMgogICAgYXNzZXJ0X2VxdWFsIFs5LCA1XSwgRltbOSwgNV0sIDNdCiAgZW5kCgogIGRlZiB0ZXN0X2Nhc2VfMwogICAgYXNzZXJ0X2VxdWFsIFsyLCA5LCA1XSwgRltbNSwgOSwgMl0sIDZdCiAgZW5kCgogIGRlZiB0ZXN0X2Nhc2VfNAogICAgYXNzZXJ0X2VxdWFsIFs1LCA5LCAyXSwgRltbNSwgOSwgMl0sIDEwXQogIGVuZAoKICBkZWYgdGVzdF9jYXNlXzUKICAgIGFzc2VydF9lcXVhbCAgWzEsIDUsIDcsIDgsIDJdLCBGW1s1LCA3LCA4LCAxLCAyXSwgMTAgXQogIGVuZAoKICBkZWYgdGVzdF9jYXNlXzYKICAgIGFzc2VydF9lcXVhbCAgWzEsIDYsIDgsIDIsIDMsIDVdLCBGW1s1LCAxLCA2LCA4LCAzLCAyXSwgMTcgXQogIGVuZAoKICBkZWYgdGVzdF9jYXNlXzcKICAgIGFzc2VydF9lcXVhbCAgWzEsIDcsIDgsIDksIDIsIDNdLCBGW1sxLCAyLCAzLCA3LCA4LCA5XSwgMTUgXQogIGVuZAoKICBkZWYgdGVzdF9jYXNlXzgKICAgIGFzc2VydF9lcXVhbCAgWzgsIDcsIDksIDEsIDIsIDNdLCBGW1s5LCA4LCA3LCAzLCAyLCAxXSwgMTUgXQogIGVuZAoKICBkZWYgdGVzdF9jYXNlXzkKICAgIGFzc2VydF9lcXVhbCAgWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldLCBGW1sxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XSwgMjAgXQogIGVuZAoKICBkZWYgdGVzdF9jYXNlXzEwCiAgICBhc3NlcnRfZXF1YWwgIFs4LCA3LCA1LCA5LCA2LCAxLCAyLCA0LCAzXSwgRltbOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMV0sIDIwIF0KICBlbmQKZW5k