#include<bits/stdc++.h>
#define N 1050
using namespace std;
int n,g[N][N],f[N];
int zy[N];
int a,b,c;
bool v[N];
struct hero{int d,val;};
bool operator < (hero a,hero b){return a.val>b.val;}
priority_queue <hero> q;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&f[i]);
q.push((hero){i,f[i]});
zy[i]=1;
}
while(scanf("%d%d%d",&a,&b,&c)!=EOF)g[a+1][b+1]=g[b+1][a+1]=c+1;
while(!q.empty())
{
hero now=q.top();
q.pop();
int x=now.d;
if(v[x])continue;
v[x]=1;
for(int i=1;i<=n;i++)
{
if(!v[i])continue;
if(f[i]+f[x]==f[g[x][i]])zy[g[x][i]]+=zy[x]*zy[i];
if(f[i]+f[x]<f[g[x][i]])
{
f[g[x][i]]=f[x]+f[i];
zy[g[x][i]]=zy[x]*zy[i];
q.push((hero){i,zy[i]});
}
}
}
printf("%d %d\n",f[1],zy[1]);
return 0;
}