//土尔逊Torson 编写于2023/05/18
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
using namespace std;
long long MyPow(long long x, long long y, int k) {//快速幂
long long answer = 1; //初始化为 1
//因为N<k 即 N <= k-1 时 N' 表示N的K进制表示的各位数字之和
//又因为 N = a0 + a1k + a2k^2 + ... N' = a0 + a1 + a2 + ...
//N-N' = a1(k-1) + a2(k^2-1)... --> (N-N')%(k-1) = 0
//(x * y) % k = (x % k) * (y % k) % k
//同上 因为 N'<K 所以N'= N % (k-1),如果 N%(K-1)==0,说明 N'=k-1
while (y != 0) { //不断把y转换为二进制
if (y % 2) { //若当前位为 1,累乘 x 的 2^k 次幂
answer *= x;
answer %= (k - 1); //求后 k-1 位
}
y /= 2;
x *= x; //x 不断平方
//2^1 = 2;
//2^2 = 2^1 * 2^1 = 4;
//2^4 = 2^2 * 2^2 = 16;
//...
x %= (k - 1);
//例: 9 = 1 + 8
// 23 = 1 + 2 + 4 + 16
//3^29;
//29 = 1 + 4 + 8 + 16;
//29(2) = 11101
//11101 = 2^0 + 2^2 + 2^3 + 2^4
//3^29 = 3^1 * 3^4 * 3^8 * 3^16
}
return answer ? answer : k - 1;
}
int main() {
long long x, y;
int k;
while (scanf("%lld%lld%d", &x, &y, &k) != EOF) {
printf("%lld\n", MyPow(x, y, k));
}
}
// 64 位输出请用 printf("%lld")