#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<pair<ll,ll> > edge[1001];
ll b[1001];
ll ans[1001];
ll dis[1001];
ll n;
ll u,v,w;
ll nw,sh=100000000;
priority_queue<pair<int,int> > q;
signed main(){
scanf("%lld",&n);
for (int i=1;i<=n;i++){
scanf("%lld",&dis[i]);
if(sh>dis[i]) nw=i,sh=dis[i];
ans[i]=1;
}
while(scanf("%lld%lld%lld",&u,&v,&w)!=EOF){
edge[u+1].push_back(make_pair(v+1,w+1));
edge[v+1].push_back(make_pair(u+1,w+1));
}
q.push(make_pair(-dis[nw],nw));
while(!q.empty()){
u=q.top().second;
q.pop();
if(b[u]==1){
continue;
}
b[u]=1;
for (int i=0;i<edge[u].size();i++){
v=edge[u][i].first;
w=edge[u][i].second;
if(!b[v]) continue;
if(dis[w]>dis[u]+dis[v]){
dis[w]=dis[u]+dis[v];
ans[w]=ans[u]*ans[v];
if(!b[w]) q.push(make_pair(-dis[w],w));
}
else if(dis[w]==dis[u]+dis[v]){
ans[w]+=ans[u]*ans[v];
}
}
}
printf("%lld %lld",dis[1],ans[1]);
}