#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<vector>
#include<cmath>
#include<string>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
ll a,c;
//欧拉函数直接法,复杂度=根n
ll eular(ll n){
ll m=n;
for(ll i=2;i*i<=n;i++){
if(n%i==0){//i一定为质因子
m-=m/i;//有公式eular(m)=m*(1-1/p1)*(1-1/p2)*...*(1-1/pn);其中pi是m的质因子
while(n%i==0){
n/=i;//将该质因子约掉,确保接下来找到的因子为质因子
}
}
}
if(n>1){//如果n约掉质因子后还不为1,这说明现在的n是原来n的一个质因子
m-=m/n;
}
return m;
}
//快速幂
ll quick(ll x,ll b,ll mod){
ll ans=1;
while(b){
if(b&1){
ans=(ans*x)%mod;
}
b>>=1;
x=(x*x)%mod;
}
return ans;
}
ll chushu,sum;
char s[20000001];
//注意,下面读指数的时候不能一位一位的读,超时
ll read(){
scanf("%lld %lld %s",&a,&c,s);
chushu=eular(c);//c的欧拉函数
sum=0;
ll mod=0;
ll len=strlen(s);
for(ll i=0;i<len;i++){
if(sum<=chushu){//用sum判断指数b和c的欧拉函数的大小
sum=sum*10+s[i]-'0';
}
mod=(mod*10+s[i]-'0')%chushu;
}
return mod;
}
int main(){
ll x=read();
if(sum>chushu){
x+=chushu;//符合降幂公式
}
else if(sum==chushu){
x=sum;//不符合降幂公式,但sum正好是指数b的值
}
//否则sum<chushu,得出的模就是指数b的本身
ll ans=quick(a,x,c);
printf("%lld\n",ans);
return 0;
}