#include<bits/stdc++.h>
#define ll long long
const ll mod = 1e9 + 7;
using namespace std;
struct Mat
{
ll m[101][101];
};//存储结构体
Mat a, e; //a是输入的矩阵,e是输出的矩阵
Mat Mul(Mat x, Mat y)
{
Mat c;
for (int i = 1; i <= 3; ++i) {
for (int j = 1; j <= 3; ++j) {
c.m[i][j] = 0;
}
}
for (int i = 1; i <= 3; ++i) {
for (int j = 1; j <= 3; ++j) {
for (int k = 1; k <= 3; ++k) {
c.m[i][j] = (c.m[i][j] % (mod-1) + x.m[i][k] * y.m[k][j] % (mod-1))%(mod-1);
}
}
}
return c;
}
Mat pow(Mat x, ll y)//矩阵快速幂
{
Mat ans = e;
while (y) {
if (y & 1) ans = Mul(ans, x);
x = Mul(x, x);
y >>= 1;
}
return ans;
}
/*ll quickpow(ll x, ll y,ll mod) {
ll ans = 1; x %= mod;
while (y) {
if (y & 1)ans = ans * x%mod;
x = x * x%mod;
y >>= 1;
}
return ans;
}*/
ll quickpow(ll x, ll y, ll mod)
{
if (y == 0)return 1;
if (y == 1)return x % mod;
else
{
if (y % 2 == 0)
{
ll t = quickpow(x, y / 2, mod);
return t * t%mod;
}
else
{
ll t= quickpow(x, y / 2, mod);
t = t * t%mod;
return (t * (x%mod))%mod;
}
}
}
int main()
{
//cout << quickpow(2, 7778742049, mod);
//50 1 2 1 1 528045088
ll n, x, y, aa, b;
cin >> n >> x >> y >> aa >> b;
if (n == 1)
{
cout << x % mod;
}
else if (n == 2)
{
cout << y % mod;
}
else if (x%mod == 0 || y % mod == 0 || aa % mod == 0) { cout << 0; return 0; }
else {
for (ll i = 1; i <= 3; i++)
{
e.m[i][i] = 1;
}
a.m[1][1] = 1, a.m[1][2] = 1, a.m[1][3] = 1;
a.m[2][1] = 1, a.m[2][2] = 0, a.m[2][3] = 0;
a.m[3][1] = 0, a.m[3][2] = 0, a.m[3][3] = 1;
Mat res;
res = pow(a, n - 2);
ll res1 = quickpow(y, res.m[1][1],mod);
ll res2 = quickpow(x, res.m[1][2],mod);
ll res3 = quickpow(aa, b,mod);
res3 = quickpow(res3, res.m[1][3],mod);
cout << (((res1*res2) % mod)*res3) % mod << endl;
}
}