传送门
就是一个exgcd的板子。
但注意算距离差的时候是在一个环上面算。
还有,答案要开long long233。。。
注意这两点之后就是exgcd板子了。
代码;
#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline ll gcd(ll a,ll b){while(b){ll t=a;a=b,b=t%a;}return a;}
ll a,b,c,d,e,T_T,x,y,tmp;
inline void exgcd(ll a,ll b,ll&x,ll&y){
if(!b){x=1,y=0;return;}
exgcd(b,a%b,x,y),tmp=x,x=y,y=tmp-a/b*y;
}
int main(){
cin>>T_T;
while(T_T--){
cin>>b>>a>>d>>e,c=(e-d+b)%b;
ll g=gcd(a,b);
if(c%g){puts("Impossible");continue;}
a/=g,b/=g,c/=g,exgcd(a,b,x,y),x*=c,y*=c;
printf("%lld\n",(x%b+b)%b);
}
return 0;
}