#include<bits/stdc++.h>
using namespace std;
long long n,pri[1005],a,b,c,num[1005];
bool vis[1005];
int m[1005][1005];
priority_queue<pair<int,int> >q;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>pri[i],num[i]=1;
m[1004][i]=i;
}
while(cin>>a>>b>>c){
m[a+1][b+1]=c+1,m[b+1][a+1]=c+1;
}
q.push(make_pair(0,1004));
while(q.size()){
int x=q.top().second;
q.pop();
if(vis[x])continue;
for(int i=1;i<=n;i++){
if(m[x][i]==0||vis[i])continue;
int k=m[x][i],v=i;
if(pri[k]>pri[x]+pri[v]){
pri[k]=pri[x]+pri[v];
q.push(make_pair(-pri[k],k));
num[k]=num[x]*num[v];
}else if(pri[k]==pri[x]+pri[v]){
q.push(make_pair(-pri[k],k));
num[k]+=num[x]*num[v];
}
}
vis[x]=1;
}
cout<<pri[1]<<" "<<num[1];
}