Codeforces Round #653 (Div. 3) - F. Cyclic Shifts Sorting
解説
まず与えられる操作は偶置換なので、もし値が全部異なるなら、ソート済みの数列と与えられる数列の置換の偶奇が違えばその時点で-1
です。そうでなければ、適当に操作すれば答えが出ます。
以下同じ数字が存在するものとします
ここでいったん、全ての値が異なるように値を小さいほうから割り振りなおします。
で適当に操作してうまくいけば、それを出力です。
うまくいかないとき、同じ数字のやつの割り振った数字を入れ替えます。
この操作が必ず奇置換になる(帰納法で簡単に示せます)ので、置換の偶奇が入れ替わるため適当に操作すれば構築可能です。