exgcd
( x + m*t ) - ( y + n*t ) = k * L => ( n - m ) * t + k * L = x - y
//Serene #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; long long l,m,n,x,y; void exgcd(long long a,long long b,long long &x,long long &y) { if(!b) { x=1;y=0;return ; } exgcd(b,a%b,x,y); swap(x,y);y=y-a/b*x; } long long gcd(long long a,long long b) { return b? gcd(b,a%b):a; } int main() { scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l); long long a,b,c,gg; a=n-m;b=l;c=x-y; gg=gcd(a,b); if(c%gg) { printf("Impossible"); return 0; } a/=gg;b/=gg;c/=gg; exgcd(a,b,x,y); x=((c*x)%b+b)%b; if(!x)x+=b; printf("%lld",x); return 0; }