module main; // // https://ei1333.github.io/library/math/number-theory/ より import std; // オイラーのファイ関数 long eulerPhi(long n) { long ret = n; for (long i = 2; i * i <= n; i++) { if (n % i) continue; ret -= ret / i; while (n % i == 0) n /= i; } if (n > 1) ret -= ret / n; return ret; } long modPow(long x, long n, long MOD) { long ret = 1; while (n > 0) { if (n & 1) ret = ret * x % MOD; // n の最下位bitが 1 ならば x^(2^i) をかける x = x * x % MOD; n >>= 1; // n を1bit右にずらす } return ret; } long modTetration(long a, long b, long m) { if (m == 1) return 0; if (a == 0) return !(b & 1); if (b == 0) return 1; if (b == 1) return a % m; if (b == 2) return modPow(a, a, m); auto phi = eulerPhi(m); auto tmp = modTetration(a, b - 1, phi); if (tmp == 0) tmp += phi; return modPow(a, tmp, m); } void main() { // 入力 long A, N, M; readln.chomp.formattedRead("%d %d %d", A, N, M); // 答えの計算と出力 writeln(modTetration(A, N, M)); }