Loading [MathJax]/jax/output/CommonHTML/jax.js

G: Cryptex

問題

AORイカちゃんは自分の宝箱にダイヤル式の鍵をかけている。

鍵には N 個のシリンダーがついている。 あらかじめ設定しておいた N 個の数の並びからなる暗証番号 T と、シリンダーが示す数列が同じであれば開錠することができる。

シリンダーには、 0 から M1 までの M 種類の数が同じ向きに順に刻まれており、最初はすべてのシリンダーが 0 を示している。

鍵は特別製であり、シリンダーを一つずつ回すことができない。任意のシリンダーを二つ選び、それらを同時に動かさなければならない。

一回シリンダーを回すとは、以下のように定義される。

  1. シリンダーを二つ選ぶ。ただし、同じシリンダーは選べない。
  2. 選んだシリンダーを二つとも順方向、あるいは二つとも逆方向に回す。順方向に回すとは数を 1 増やすことであり、逆方向に回すとは数を 1 減らすことである。ただし、 0 を示している状態で逆方向に回すと M1 を示し、 M1 を示している状態で順方向に回すと 0 を示す。

AORイカちゃんのために、鍵を開けるために必要なシリンダーの最小の回転数を求めよ。ただし、開けることができない場合は 1 を出力せよ。

制約

入力形式

入力は以下の形式で与えられる。

N M
T1 T2 T3TN

出力

鍵を開けるために必要なシリンダーの最小の回転数を出力せよ。ただし、開けることができない場合は 1 を出力せよ。また、末尾に改行も出力せよ。

サンプル

サンプル入力 1

2 3
0 1

サンプル出力 1

-1

サンプル入力 2

3 6
0 4 4

サンプル出力 2

2

サンプル入力 3

3 6
2 4 2

サンプル出力 3

4

サンプル入力 4

15 56
19 32 40 34 4 10 30 15 4 18 52 28 18 8 4

サンプル出力 4

110