// 380K 32MS G++
#include <stdio.h>
#include <string.h>
long long EXTENDED_EUCLID(long long a,long long b,long long& x,long long& y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
long long d = EXTENDED_EUCLID(b,a%b,x,y);
long long xt = x;
x=y;
y=xt-a/b*y;
return d;
}
int main(void)
{
long long X,Y,m,n,L;
scanf("%lld %lld %lld %lld %lld", &X,&Y,&m,&n, &L);
// printf("%lld %lld %lld %lld %lld\n", X, Y, m, n, L);
long long a = n - m;
long long b = X-Y;
long long x,y;
long long d = EXTENDED_EUCLID(n - m,L,x,y);
// printf("%lld %lld %lld\n", d, x, y);
if (b%d != 0) {
printf("Impossible\n");
} else {
x = (x*(b/d))%L;
// printf("x %lld\n", x);
x = (x%(L/d)+L/d)%(L/d);
printf("%lld\n", x);
}
return 0;
}
http://www.cnblogs.com/yueshuqiao/archive/2011/08/23/2150960.html