#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdlib>
using namespace std;
const int MAX=100005;
bool pri[MAX];
long long int f[MAX];
int pp[MAX],sz=0;
long long int phi(long long x)
{
int i;
long long int ans=x;
for(i=0;i<sz&&pp[i]<=x;i++)
if(x%pp[i]==0)
{
//cout<<ans<<endl;
ans=(ans/pp[i])*(pp[i]-1);
while(x%pp[i]==0) x/=pp[i];
}
if(x>1)
ans=(ans/x)*(x-1);
return ans;
}
long long int gcd(long long int x,long long int y)
{
long long int t;
while(x)
{
t=x;
x=y%x;
y=t;
}
return y;
}
long long int PPow(long long int x,long long int y,int long long a)
{
long long int ans=1;
for(;y>0;y>>=1)
{
if(y&1) ans=(ans*x)%a;
x=x*x%a;
}
return ans;
}
int main()
{
long long int i,j;
memset(pri,0,sizeof(pri));
memset(pp,0,sizeof(pp));
for(i=2;i<MAX;i++)
if(!pri[i])
{
pp[sz++]=i;
for(j=i+i;j<MAX;j+=i)
{
//cout<<j<<' '<<pp[j][0]-1<<' '<<i<<endl;
pri[j]=true;
}
}
//for(i=1;i<=20;i++)
//cout<<phi(999999999)<<endl;
long long int x,y,a;
while(cin>>x>>y>>a)
{
long long int d=y/(x-1);
if(d%a==0)
{
printf("1\n");
}
else
{
long long int m=gcd(a,d);
a/=m;
if(gcd(a,x)!=1)
printf("Impossible!\n");
else
{
long long n=phi(a),min=n;
//cout<<n<<endl;
for(i=1;i*i<=n;i++)
if(n%i==0)
{
if(PPow(x,i,a)==1&&i<min)
min=i;
if(PPow(x,n/i,a)==1&&n/i<min)
min=n/i;
}
cout<<min<<endl;
}
}
}
return 0;
}