Dos ranas en el conocido Internet, y hablaban alegremente, por lo que es necesario para ver el lado.
Están encantados de encontrar que viven en la misma línea de latitud, por lo que accedieron a su oeste-hop hasta que encuentre hasta el momento.
Pero antes de empezar a olvidar una cosa muy importante, ni piden otras características, no existe un acuerdo para cumplir con la ubicación específica.
Pero las ranas son muy optimistas, siempre y cuando se sienten se ha estado moviendo en una dirección determinada salto, siempre se ejecutan en cada uno de otros.
Pero a menos que estos dos ranas saltan al mismo punto, al mismo tiempo, de lo contrario es imposible no conocer al.
Para ayudar a estos dos rana optimista, se le pide que escriba un programa para determinar si se puede cumplir con dos ranas, se reunirá en qué momento.
Llamamos a dos ranas fueron llamados Una rana y la rana B, una longitud predeterminada y latitud 0 grados en la línea de origen en el sentido positivo de este a oeste, una unidad de 1 m de longitud, de manera que se obtiene un tope ejes .
Una rana se proporciona es las coordenadas del punto de partida x, las coordenadas del punto de partida de la rana B es y.
Una rana m m un salto, una rana salto n B m, dos salto de rana toma al mismo tiempo.
línea latitud longitud L metros.
Ahora se encontrará varias veces después del salto encontrarlos.
Formato de entrada
de línea de entrada 5 incluye sólo los números enteros x, y, m, n, L, donde x ≠ y <2000000000,0 <m, n <2000000000,0 <L <2100000000.
Formato de salida
de salida para cumplir con el número requerido de lúpulo, nunca se cumple si la línea de salida "imposible"
Rango de datos
x ≠ y <2000000000x ≠ y < 2000000000,
0 <m, n <20000000000 <m, n <2000000000,
0 <L <21000000000 <L < 2100000000
de entrada de la muestra:
12 345
Resultado de muestra:
4
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long LL;
LL exgcd(LL a, LL b, LL &x, LL &y){
if (!b){
x = 1, y = 0;
return a;
}
LL d = exgcd(b, a % b, y, x);
y -= a / b * x;
return d;
}
int main(){
LL a, b, m, n, l;
cin >> a >> b >> m >> n >> l;
LL x, y;
LL d = exgcd(m - n, l, x, y);
if ((b - a) %d ) puts("Impossible");
else{
x *= (b - a) / d;
int t = abs(l / d);
cout << (x % t + t) % t << endl;
}
return 0;
}