#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;
	}
}