#include<iostream>
#include<algorithm>
#include<ctime>
#include<cmath>
#include<cstdio>
#include<cstring>
#define LL long long
using namespace std;
LL mod_mul(LL x,LL y,LL mo)
{
LL t;
x %= mo;
for(t = 0; y; x = (x<<1)%mo,y>>=1)
if(y & 1)
t = (t+x) %mo;
return t;
}
//LL mod_mul(LL x,LL y,LL mo)
//{
// LL t,T,a,b,c,d,e,f,g,h,v,ans;
// T = (LL)(sqrt(double(mo)+0.5));
// t = T*T - mo;
// a = x / T;
// b = x % T;
// c = y / T;
// d = y % T;
// e = a*c / T;
// f = a*c % T;
// v = ((a*d+b*c)%mo + e*t) % mo;
// g = v / T;
// h = v % T;
// ans = (((f+g)*t%mo + b*d)% mo + h*T)%mo;
// while(ans < 0)
// ans += mo;
// return ans;
//}
LL mod_exp(LL num,LL t,LL mo)
{
LL ret = 1, temp = num % mo;
for(; t; t >>=1,temp=mod_mul(temp,temp,mo))
if(t & 1)
ret = mod_mul(ret,temp,mo);
return ret;
}
//PollarRho大整数因子分解
LL gcd(LL a,LL b)
{
if(b == 0)
return a;
return gcd(b, a % b);
}
LL PollarRho(LL n, int c)
{
int i = 1;
srand(time(NULL));
LL x = rand() % (n-1) + 1;
LL y = x;
int k = 2;
while(true)
{
i++;
x = (mod_exp(x,2,n) + c) % n;
LL d = gcd(n+y-x,n);
if(1 < d && d < n)
return d;
if(y == x)
return n;
if(i == k)
{
y = x;
k *= 2;
}
}
}
void ExGCD(LL a,LL b,LL &d,LL &x,LL &y)
{
if(b == 0)
{
x = 1;
y = 0;
d = a;
}
else
{
ExGCD(b,a%b,d,y,x);
y -= x*(a/b);
}
}
int main()
{
LL p,q,t,c,e,n;
while(cin >> c >> e >> n)
{
p = PollarRho(n,10007);
q = n/p;
t = (p-1)*(q-1);
LL d,x0,y0;
ExGCD(e,t,d,x0,y0);
x0 = (x0%t + t) % t;
cout << mod_exp(c,x0,n) << endl;
}
return 0;
}