#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
const int N=100005;
int n,m,cnt,top,ans1,ans2;
vector<int>G[N];
int w[N],st[N],cl[N],vis[N],dfn[N],low[N],mi[N],s[N],t[N];
vector<int>D[N];
void tarjan(int u){
dfn[u]=++dfn[0],st[++top]=u,low[u]=dfn[u],vis[u]=1;
for(auto v:G[u]){
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}else if(vis[v])low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u]){
cnt++,cl[u]=cnt;
D[cnt].push_back(u);
while(st[top]!=u){
cl[st[top]]=cnt,vis[st[top]]=0,D[cnt].push_back(st[top]);
top--;
}
top--,vis[u]=0;
}
}
signed main(){
ans1=0,ans2=1;
cin>>n;
for(int i=1;i<=n;i++)cin>>w[i];
cin>>m;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
G[u].push_back(v);
}
for(int i=1;i<=n;i++){
if(!dfn[i])tarjan(i);
}
for(int i=1;i<=cnt;i++){
int ct,mii;
for(int j=0;j<D[i].size();j++){
ct=1,mii=2147483647;
if(w[D[i][j]]==mii)ct++;
if(w[D[i][j]]<mii)mii=w[D[i][j]],ct=1;
}
ans1+=mii,ans2*=ct,ans2%=mod;
}
cout<<ans1<<' '<<ans2;
return 0;
}```