/*
    就是求(b-1)*b^(n-1) % c
    其中2<=b<=10^10^6 1<=n<=10^10^6,1<=c<=10^9
    用Java高精度,超时了
    看了别人的代码,神奇丫

    b % c 其中b是大整数,可以从高位往低位逐位搞 r = (r*10+b[i])%c
    更神奇的是,a^b%c一样也可以用上面那样子搞
    但是就不是r*10而是r^10, r = (r^10*(a^b[i]))%c
    a^b[i]可以预处理,即a^0,a^1,,a^9

    有用公式
    a^b % c = a^b' %c
    其中b' = b>= p?b%p+p: b%p   p = phi(c)
    这个公式成立不需要(a,c)=1!!!
*/

#include
<iostream>
#include
<cstring>
#include
<map>
#include
<algorithm>
#include
<stack>
#include
<queue>
#include
<cmath>
#include
<string>
#include
<cstdlib>
#include
<vector>
#include
<cstdio>
#include
<set>
#include
<list>
#include
<numeric>
#include
<cassert>
#include
<ctime>
#include
<bitset>

using namespace std;

const int MAXN = 1000010;

char b[MAXN], n[MAXN];
long long p[10];

int main()
{
#ifndef ONLINE_JUDGE
//    freopen("in","r",stdin);
#endif
    
    
for (long long c; ~scanf("%s%s%I64d", b, n, &c); ) {
        
//(b-1)*b^(n-1) % c
        int len = strlen(b);
        
long long r = 0, left;
        
for (int i = 0; i < len ; i ++{//r = b%c
            r = (r*10 + b[i]-'0'% c;
        }

        left 
= (r+c-1% c;
        
        len 
= strlen(n);
        
for (int i = len - 1; i >= 0 ; i-- ) {
            
if (n[i] == '0'{
                n[i] 
= '9';
            }
else {
                n[i] 
--;
                
break;
            }

        }

        
//p[i] = b^i % c;
        p[0= 1;
        
for(int i = 1 ; i < 10 ; i++{
            p[i] 
= p[i-1* r % c;
        }

        r 
= 1;
        
for (int i = 0; i < len ; i ++{
            
long long t = r;
            
for (int j = 1 ;j < 10 ; j++{//b^(l*10)
                r = r * t % c;
            }

            r 
= r*p[n[i]-'0'% c;
        }


        r 
= left * r % c;
        printf(
"%I64d\n", r == 0 ? c : r);
    }

    
return 0;
}