//二分求幂:
int getMi(int a,int b)
{
int ans = 1;
while (b != 0)
{
//当二进制位k位为1时,需要累乘a的2^k次方,然后用ans保存
if (b % 2 == 1)
{
ans *= a;
}
a *= a;
b /= 2;
}
return ans;
}
#include <cstdio>
#include <math.h>
#include <cstring>
#include <algorithm>
//root(x*y,k) = root(root(x,k)*root(y,k),k)
int Root(int N,int k)
{
if(N<k)return N;
int ans = 0;
//N大于k, 求N为k进制时各位之和
while(N != 0){
ans += N%k;
N /= k;
}
return Root(ans,k);
}
int getAns(int x,int y,int k)
{
int num = Root(x,k);
int ans = 1;
while(y > 0){
if(y%2){//y为奇数
ans = Root(ans*num, k);
}
y /= 2;
num = Root(num*num, k);
}
return ans;
}
int main()
{
int x,y,k;
while(~scanf("%d %d %d",&x,&y,&k)){
printf("%d\n",getAns(x,y,k));
}
return 0;
}