若方程ax+by=c的一组整数解为(x0,y0),则它的任意解都可写成(x0+kb‘,y0+ka‘),其中b‘=b/gcd(a,b),a‘=a/gcd(a,b),k取任意整数!
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
typedef long long LL;
void gcd(LL a,LL b,LL &d,LL &x,LL &y){
if(!b) {d=a;x=1;y=0;}
else {gcd(b,a%b,d,y,x);y-=x*(a/b);}
}
int main()
{
LL x,y,m,n,l;
while(~scanf("%I64d%I64d%I64d%I64d%I64d",&x,&y,&m,&n,&l)){
if(m==n) {puts("Impossible");continue;}
LL a,b,c,u,v,w; a = n-m;b = l;c=x-y;gcd(a,b,u,v,w);
if(c%u==0) {
b/=u,v*=(c/u);printf("%I64d\n",(v%b+b)%b);
}
else puts("Impossible");
}
return 0;
}