#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstring>
#include<cmath>
#include<stack>
using namespace std;
int ans1,a,b,c,d,e,f,g,m,n,z,x,k1[500001],k2[500001],l,o,opt,head[500001],cnt,ans,ans2,dfn[500001],low[500001],mjc,vis[500001],ma[500001],in[500001],out[500001],s[100001],s1[100001],s2[100001];
stack <int >p;
void ab(int q,int w)
{
cnt++;
k1[cnt]=head[q];
k2[cnt]=w;
head[q]=cnt;
}
void tarjin(int q)
{
int w;
dfn[q]=low[q]=++mjc;
p.push(q);
vis[q]=1;
for(int i=head[q];i!=0;i=k1[i])
{
w=k2[i];
if(dfn[w]==0)
{
tarjin(w);
low[q]=min(low[q],low[w]);
}
else
if(vis[w])
low[q]=min(low[q],dfn[w]);
}
if(low[q]==dfn[q])
{
ans++;
while(q!=w)
{
w=p.top();
p.pop();
vis[w]=0;
ma[w]=ans;
}
}
}
int main ( )
{
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d",&s[i]);
cin>>m;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&b,&c);
if(b!=c)
ab(b,c);
}
for(int i=1;i<=n;i++)
if(!dfn[i])
tarjin(i);
for(a=1;a<=n;a++)
{
x=head[a];
if(s1[ma[a]]==0)
s1[ma[a]]=s[a],s2[ma[a]]++;
else
{
if(s1[ma[a]]==s[a])
s2[ma[a]]++;
if(s1[ma[a]]>s[a])
s2[ma[a]]=1,s1[ma[a]]=s[a];
}
}
ans1=0;ans2=1;
for(a=1;a<=ans;a++)
{
ans1+=s1[a];
ans2*=s2[a];
}
if(ans1!=0)
cout<<ans1<<' '<<ans2;
else
cout<<0<<' '<<0;
return 0 ;
}