#include <iostream>
using namespace std;
typedef unsigned long long ll;
const ll mod=1000000007;
const ll MOD=1000000007;
struct bt{
ll a,b;
bt nxt()
{
bt ans;
ll xz;
xz=(a+b)%(MOD-1);
ans.a=b;
ans.b=xz;
return ans;
}
bt db()
{
ll ansa,ansb;
ll md=MOD-1;
ansa=(a*a%md+b*b%md)%md;
ansb=(2*a+b)%md*b%md;
bt ans;
ans.a=ansa;
ans.b=ansb;
return ans;
}
};
ll pw(ll a,ll x)
{
if (x==0) return 1;
ll ap=pw(a,x/2);
if (x%2==1) return ap*ap%MOD*a%MOD;
else return ap*ap%MOD;
}
bt fb(ll x)
{
bt ans;
ans.a=0;
ans.b=1;
if (x==1) return ans;
bt ap=fb(x/2).db();
if (x%2==0)
return ap;
else return ap.nxt();
}
ll a,b,c,n,q;
int main()
{
cin>>q;
cin>>a>>b;
cin>>c>>n;
if (q==1) {cout<<a%mod<<endl;return 0;}
if (q==2) {cout<<b%mod<<endl;return 0;}
c=pw(c%MOD,n);
//cout<<q<<endl;
ll ans1=fb(q-2).b;
ll ans2=fb(q-1).b;
ll ans3=(fb(q).b+mod-2)%(mod-1);
//cout<<ans1<<' '<<ans2<<' '<<ans3<<endl;
ll ans=pw(a%MOD,ans1)*pw(b%MOD,ans2)%MOD*pw(c,ans3)%MOD;
cout<<ans<<endl;
}