http://acm.pku.edu.cn/JudgeOnline/problem?id=1061

Код:
Program PKU1061;
  Var X,Y,M,N,L,O:Int64;
  Procedure Init;
    Var X1,Y1,M1,N1,L1:Longint;
    Begin
      Readln(X1,Y1,M1,N1,L1);
      X:=X1;Y:=Y1;M:=M1;N:=N1;L:=L1;
    End;
  Function Gcd(A,B:Int64;Var X,Y:Int64):Int64;
    Var T:Int64;
    Begin
      If B=0 Then Begin
        Gcd:=A;
        X:=1;
        Y:=0;
      End Else Begin
        Gcd:=Gcd(B,A Mod B,X,Y);
        T:=X;
        X:=Y;
        Y:=T-(A Div B)*Y;
      End;
    End;
  Procedure Main;
    Var A,B,G,X1,Y1:Int64;
    Begin
      A:=M-N;
      B:=Y-X;
      If A=0 Then Begin
        O:=-100;
        Exit;
      End;
      If B=0 Then Begin
        O:=0;
        Exit;
      End;
      If A<0 Then Begin
        A:=-A;
        G:=M;M:=N;N:=G;
        B:=-B;
        G:=X;X:=Y;Y:=G;
      End;
      G:=Gcd(A,L,X1,Y1);
      If Abs(B) Mod G<>0 Then Begin
        O:=-100;
        Exit;
      End;
      L:=L Div G;
      X1:=X1*(B Div G);
      Y1:=Y1*(B Div G);
      X1:=X1 Mod L;
      Y1:=Y1 Mod L;
      If X1<0 Then Begin
        X1:=(-X1) Mod L;
        X1:=-X1;
        X1:=X1+L;
        X1:=X1+L;
      End;
      X1:=X1 Mod L;
      O:=X1;
    End;
  Procedure Out;
    Begin
      If O=-100 Then Writeln('Impossible') Else Writeln(O);
    End;
Begin
  Init;
  Main;
  Out;
End.