G - Rodamiento de Grafeno

Languages: C, C++, Java, Pascal, Haskell, Python, JavaScript, Tiger, C#
Time & Memory limits: (details)

El Grafeno es un material muy particular para el cual hay infinidad de aplicaciones. Fito comenzó a trabajar en un laboratorio que busca nuevas aplicaciones para este material. Una de las aplicaciones que están desarrollando es un rodamiento atómico de grafeno. El rodamiento no es más que una disposición circular de átomos de grafeno de longitud L (1<=L<=10^9, esta es la cantidad de átomos de grafeno que están concatenados de manera circular), mediante un encendido electromagnético se pueden cargar positivamente N (1<=N<=10^5) átomos de grafeno del rodamiento. Ahora el problema es que no siempre quedan cargados los átomos de manera consecutiva y para que el rodamiento funcione correctamente estos deben de estar cargados de manera consecutiva. Se tiene un dispositivo con un cabezal que puede acceder a un átomo de grafeno sin costo alguno girando a la izquierda o a la derecha el circulo. Este cabezal puede intercambiar la carga positiva con  los átomos que están a la derecha o a la izquierda con costo 1 siempre y cuando estos estén descargados.

Nuestra tarea es programar el software que manipula el cabezal para lograr que funcione el rodamiento con el menor costo posible.

Input

La entrada contiene varios casos de prueba. En cada caso de prueba la primera línea es una línea con dos enteros N y L separados por un espacio. Luego en las N líneas consecutivas están las posiciones de los átomos que se cargan inicialmente, estas posiciones están en el rango de 0 a L-1. La entrada termina cuando N=0 y L =0.

Output

Por cada caso de entrada se imprime en una línea el costo mínimo para lograr que el rodamiento funcione.

Sample test(s)

Input
3 5 0 1 3 2 3 0 1 5 20 2 7 12 9 13 0 0
Output
1 0 10