# include <iostream>
using namespace std;
int fastpow(int a,int b,int p) {
	int ans=1;
	a=a%p;
	for(int i=0; i<=31; i++) {
		if(b&(1<<i)) ans=ans*a%p;
		a=a*a%p;
	}
	return ans;
}
int main() {
	int a,b,p;
	cin>>a>>b>>p;
	cout<<fastpow(a, b,p);
	return 0;
}#include<iostream>
using namespace std;
int main() {
	int n, x;	cin >> n>>x;
	int a=0, b=0,c=0, na, nb, nc, ans=0;
	for(int i=1; i<=n; i++) {
		int now;cin>>now;
		na = max(a+now, 0);
		nb = max(max(a+now*x, b+now*x), 0);
		nc = max(max(c+now, b+now), 0);
		a= na,b= nb,c=nc;
		ans=max(max(ans,a), max(b,c));
	}
	cout <<ans;
}# include<bits/stdc++.h>
using namespace std;
typedef long long int_t;
int_t dis[1<<18][18];
struct E {
	int_t to,w;
	E(int_t to, int_t w):to(to),w(w) {}
};
vector<E> G[20];
int_t dfs(int_t rt, int_t vised, int_t n) {
	if(rt ==n-1) return 0;
	if(dis[vised][rt]) return dis[vised][rt];
	dis[vised][rt]=998244353;
	for(E e : G[rt]) {
		int_t to=e.to, w= e.w;
		if((1<<to) & vised) continue;
		dis[vised][rt]=max(dis[vised][rt],dfs(to,vised|(1<<to),n)+w);
	}
	return dis[vised][rt];
}
int main() {
	int_t n,m;	cin>> n>> m;
	while(m--) {
		int_t u,v,w;cin>>u>>v>> w;
		G[u].push_back(E(v,w));
	}
	cout<<dfs(0,1,n);
}# include <bits/stdc++.h>
using namespace std;
const int MAXN= 1e5 + 5;
int big[MAXN], small[MAXN], sum[MAXN];
int p1=1,p2=1;
int n,m,k,x;
int main() {
	cin>> n>> m>> k;
	for(int i=1; i<=n; i++) {
		cin>>x;
		if(x <= k) {
			___(1)___;
		} else {
			big[p2++]=x;
		}
	}
	sort(small+1, small+1+ p1,greater<int>());
	sort(big+ 1, big+1 + p2,  greater<int>());
	for(int i=1; i<=p1; i++) {
		___(2)___;
	}
	int ans= sum[p1], cur = 0;
	for(int i=1; i<= p2; i++) {
		cur+= ___(3)___;
		int days =___(4)___+1;
		if(days>n) {
			break;
		}
		int left = min(n-days, p1);
		ans=max(ans,___(5)___);
	}
	cout<< ans<< endl;
	return 0;
}#include<bits/stdc++.h>
using namespace std;
typedef long long int_t;
int read() {
	int_t x=0,w=1;	char ch=0;
	while(!isdigit(ch)) {ch = getchar();if(ch =='-')w=-1;}
	while(isdigit(ch)) x=___(1)___, ch=getchar();
	return x;
}
struct E {
	int_t to,w;
	E(int_t to0, int_t w0) {to=to0;	w=w0;}
};
int_t ans;
vector<E> G[501000];
int_t dfs(int_t rt, int_t fa) {
	int_t ret=0,cnt=0;
	for(E e: G[rt]) if(e.to != fa) {
			int_t res = dfs(e.to, rt)+ e.w;
			if (___(4)___) ans+=cnt*(res-ret),___(3)___,cnt++;
			else ___(2)___, cnt++;
		}
	return ret;
}
int main() {
	int_t n =read(), s = read();
	for(int_t i=1; i<n; i++) {
		int_t u = read(), v = read(), w = read();
		G[u].emplace_back(v, w);
		G[v].emplace_back(u, w);
	}
	___(5)___
	cout << ans;
	return 0 ;
}