#include<bits/stdc++.h>
using namespace std;
//#define M 5
#define input(x,y,z) scanf("%lld %lld %lld",&x,&y,&z);
#define output(x) printf("%lld\n",x);
long long int power(long long int a, long long int b,long long M) {
if(b==0)
return 1;
long long tmp=power(a,b/2,M);
tmp=(((tmp)*(tmp))%M);
if(b%2==1)
tmp=((tmp*(a%M))%M);
return (tmp%M);
}
int main(void) {
long long int t,n,k,c,i,g,ans,a,b;
while(1) {
ans=0;
int f=0;
input(a,b,c);
if(a==-1 && b==-1 &&c==-1)
break;
else {
g=power(b,c,1000000006ll);
//printf("%d\n",g);
ans=power(a,g,1000000007ll);
if(a==0) {
if(g==1)
ans=1;
else
ans=0;
}
}
ans=ans%1000000007ll;
output(ans);
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLy8jZGVmaW5lIE0gNQojZGVmaW5lIGlucHV0KHgseSx6KSBzY2FuZigiJWxsZCAlbGxkICVsbGQiLCZ4LCZ5LCZ6KTsKI2RlZmluZSBvdXRwdXQoeCkgcHJpbnRmKCIlbGxkXG4iLHgpOwpsb25nIGxvbmcgaW50IHBvd2VyKGxvbmcgbG9uZyBpbnQgYSwgbG9uZyBsb25nIGludCBiLGxvbmcgbG9uZyBNKSB7CiAgICBpZihiPT0wKQogICAgICAgIHJldHVybiAxOwogICAgbG9uZyBsb25nIHRtcD1wb3dlcihhLGIvMixNKTsKICAgIHRtcD0oKCh0bXApKih0bXApKSVNKTsKICAgIGlmKGIlMj09MSkKICAgICAgICB0bXA9KCh0bXAqKGElTSkpJU0pOwogICAgcmV0dXJuICh0bXAlTSk7Cn0KaW50IG1haW4odm9pZCkgewogICAgbG9uZyBsb25nIGludCB0LG4sayxjLGksZyxhbnMsYSxiOwogICAgd2hpbGUoMSkgewogICAgICAgIGFucz0wOwogICAgICAgIGludCBmPTA7CiAgICAgICAgaW5wdXQoYSxiLGMpOwogICAgICAgIGlmKGE9PS0xICYmIGI9PS0xICYmYz09LTEpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgZz1wb3dlcihiLGMsMTAwMDAwMDAwNmxsKTsKICAgICAgICAgICAgICAgIC8vcHJpbnRmKCIlZFxuIixnKTsKICAgICAgICAgICAgICAgIGFucz1wb3dlcihhLGcsMTAwMDAwMDAwN2xsKTsKICAgICAgICAgICAgICAgIGlmKGE9PTApIHsKICAgICAgICAgICAgICAgIAlpZihnPT0xKQogICAgICAgICAgICAgICAgCQlhbnM9MTsKICAgICAgICAgICAgICAgIAllbHNlCiAgICAgICAgICAgICAgICAJCWFucz0wOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIGFucz1hbnMlMTAwMDAwMDAwN2xsOwogICAgICAgIG91dHB1dChhbnMpOwogICAgfQogICAgcmV0dXJuIDA7Cn0=