#include<iostream>
using namespace std;
typedef unsigned long long ll;
//ll quick_pow(int a, int k, int p)
//{
// ll res = 1;
// while (k)
// {
// if (k & 1)res = res * a % p;
// a = a * ll(a) % p;
// k >>= 1;
// }
// return res;
//}
ll Slow_Mul(ll n, ll k, ll mod)
{
ll ans = 0;
while (k) {
if (k & 1) ans = (ans + n) % mod;
k >>= 1, n = (n + n) % mod;
}
return ans;
}
ll quickpow(ll x, ll k, ll mod)
{
ll res = 1;
while (k) {
if (k & 1) res = Slow_Mul(res, x, mod);
k >>= 1, x = Slow_Mul(x, x, mod);
}
return res;
}
int main()
{
ll a, b, c, d; cin >> a >> b >> c >> d;
ll p = quickpow(b%d, c, d);
cout << quickpow(a%d, p, d) << endl;
return 0;
}
#include <iostream>
using namespace std;
typedef long long ll;
ll slow_mul(ll a,ll b,ll c)
{
ll res=0;
while(b)
{
if(b&1)res=(res+a)%c;
a=(a+a)%c;
b>>=1;//等价于b/=2
}
return res%c;
}
ll quick_pow(ll a,ll b,ll c)
{
ll res=1;
while(b)
{
if(b&1)res=slow_mul(res,a,c);//无快速乘代码res=res*a%c
a=slow_mul(a,a,c);//同样a=a*a%c
b>>=1;
}
return res%c;
}
int main()
{
ll n,h,mol;
ll ans;
while(~scanf("%lld%lld%lld",&n,&h,&mol))
{
ans=quick_pow(n,h,mol);
printf("%lld\n",ans);
}
return 0;
}
#include <iostream>
using namespace std;
typedef long long ll;
ll slow_mul(ll a,ll b,ll c)
{
ll res=0;
while(b)
{
if(b&1)res=(res+a)%c;
a=(a+a)%c;
b>>=1;//等价于b/=2
}
return res%c;
}
ll quick_pow(ll a,ll b,ll c)
{
ll res=1;
while(b)
{
if(b&1)res=slow_mul(res,a,c);//无快速乘代码res=res*a%c
a=slow_mul(a,a,c);//同样a=a*a%c
b>>=1;
}
return res%c;
}
int main()
{
ll n,h,mol;
ll ans;
while(~scanf("%lld%lld%lld",&n,&h,&mol))
{
ans=quick_pow(n,h,mol);
printf("%lld\n",ans);
}
return 0;
}