#include using namespace std; #define REP(i,n) for(int i=0;i ostream& operator<<(ostream& os,const vector& vec){ os << "["; for(const auto& v : vec){ os << v << ","; } os << "]"; return os; } typedef long long ll; typedef unsigned long long ull; typedef pair pii; typedef vector vi; typedef vector vvi; constexpr long long MOD = 1e9+7; vector split(string str,char delim){ for(char& c : str) if(c==delim) c=' '; stringstream ss; ss << str; string s; vector res; while(ss >> s){ res.push_back(s); } return res; } ll mod_pow(ll x,ll n,ll mod){ ll ret=1; x %= mod; if(x==0) return 0; while(n){ if(n&1) ret = (ret*x)%mod; x = (x*x)%mod; n >>= 1; } return ret; } int main(){ string s;cin>>s; auto vs = split(s,'^'); ll a = stoll(vs[0]); ll b = stoll(vs[1]); ll c = stoll(vs[2]); a %= MOD; ll ab = mod_pow(a,b,MOD); ll abc1 = mod_pow(ab,c,MOD); ll bc = mod_pow(b,c,MOD-1); ll abc2 = mod_pow(a,bc,MOD); cout << abc1 << " " << abc2 << endl; }