#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,st;
struct zl{
ll dep;
ll arr;
ll num;
};
vector<ll> tre[200014];
vector<zl> ansa,ansb;
ll h[200014];
bool vis[200014]={0};
ll dfs(ll now){
if(vis[now]){
return 0;
}
vis[now]=true;
for(ll i=0;i<tre[now].size();i++){
ll tmp=dfs(tre[now][i]);
zl fa;
if(tmp<0){
fa.dep=now;
fa.arr=tre[now][i];
fa.num=-tmp;
ansa.push_back(fa);
}
if(tmp>0){
fa.dep=tre[now][i];
fa.arr=now;
fa.num=tmp;
ansb.push_back(fa);
}
h[now]+=tmp;
}
return h[now]-st;
}
int main(){
cin>>n;
st=0;
for(ll i=1;i<=n;i++){
cin>>h[i];
st+=h[i];
}
st/=n;
for(ll i=1;i<=n-1;i++){
ll s,t;
cin>>s>>t;
tre[s].push_back(t);
tre[t].push_back(s);
}
dfs(1);
cout<<ansa.size()+ansb.size()<<endl;
for(ll i=0;i<ansb.size();i++){
zl a=ansb[i];
cout<<a.dep<<" "<<a.arr<<" "<<a.num<<endl;
}
for(ll i=0;i<ansa.size();i++){
zl a=ansa[i];
cout<<a.dep<<" "<<a.arr<<" "<<a.num<<endl;
}
return 0;
}