#include #include #include #include #include #include #include #include using namespace std; constexpr int P = 1000000007; int64_t powll(int64_t n, int64_t k, int mod = P) { int64_t r = 1, t = n % mod; for (; k != 0; k /= 2) { if (k & 1) r = r * t % mod; t = t * t % mod; } return r; } int main() { string s; cin >> s; auto i = s.find('^'); auto j = s.find('^', i + 1); int64_t a, b, c; a = stoll(s.substr(0, i)); b = stoll(s.substr(i + 1, j)); c = stoll(s.substr(j + 1)); cout << powll(powll(a, b), c) << ' ' << powll(a, powll(b, c, P - 1)) << endl; return 0; }