#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=2e4+10;
int h[N],e[N*2],ne[N*2],w[N*2],idx;
int st[N];
int p[N],q[N];
int b[4],bb[4];
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
void add(int a,int b,int c){
e[idx]=b,ne[idx]=h[a],w[idx]=c,h[a]=idx++;
}
int get_ws(int u,int f,int tot,int &ws){
if(st[u])return 0;
int sum=1,ms=0;
for(int i=h[u];~i;i=ne[i]){
int j=e[i];
if(j==f)continue;
int t=get_ws(j,u,tot,ws);
ms=max(ms,t);
sum+=t;
}
ms=max(ms,tot-sum);
if(ms<=tot/2)ws=u;
return sum;
}
void get_dist(int u,int f,int dist){
if(st[u])return;
dist%=3;
b[dist]++;
for(int i=h[u];~i;i=ne[i]){
int j=e[i];
if(j==f)continue;
get_dist(j,u,(dist+w[i])%3);
}
}
int get_sz(int u,int f){
if(st[u])return 0;
int sz=1;
for(int i=h[u];~i;i=ne[i]){
int j=e[i];
if(j==f)continue;
sz+=get_sz(j,u);
}
return sz;
}
int get(int a[],int k){
b[0]=b[1]=b[2]=0;
for(int i=0;i<k;i++)b[a[i]%3]++;
return b[0]*b[0]+b[1]*b[2]*2;
}
int calc(int u){
if(st[u])return 0;
int ans=0;
get_ws(u,-1,get_sz(u,-1),u);
st[u]=1;
int pt=0;
bb[0]=bb[1]=bb[2]=0;
for(int i=h[u];~i;i=ne[i]){
int j=e[i];
b[0]=b[1]=b[2]=0;
get_dist(j,u,w[i]%3);
ans-=(b[1]*b[2]*2+b[0]*b[0]);
bb[0]+=b[0],bb[1]+=b[1],bb[2]+=b[2];
ans+=b[0];
}
ans+=(bb[1]*bb[2]*2+bb[0]*bb[0]);
for(int i=h[u];~i;i=ne[i]){
int j=e[i];
ans+=calc(j);
}
return ans;
}
int main(){
memset(h,-1,sizeof h);
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int n;
cin>>n;
for(int i=1;i<n;i++){
int a,b,c;
cin>>a>>b>>c;
add(a,b,c);
add(b,a,c);
}
int tot=n*n;
int ans=calc(1)+n;
if(ans==tot)cout<<"1/1";
else cout<<ans/gcd(tot,ans)<<"/"<<tot/gcd(tot,ans);
return 0;
}