rt,#2-#10 WA
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using pii = pair<int, int>;
const int maxn = 2e4+5;
int n,u,v,w,a,b,c;
int sz[maxn],f[maxn],tot,center;
int d[maxn],dis[maxn],cnt;
int num[3],ans;
vector<pii>G[maxn];
bitset<maxn>vis;
void getcenter(int u,int fa){
f[u]=0;
sz[u]=1;
for(auto p:G[u]){
int v=p.first;
if(v==fa||vis[v])continue;
getcenter(v,u);
sz[u]+=sz[v];
f[u]=max(f[u],sz[v]);
}
f[u]=max(f[u],tot-sz[u]);
if(f[u]<f[center])center=u;
}
void dfs(int u,int fa){
d[++cnt]=dis[u];
for(auto p:G[u]){
int v=p.first;
if(v==fa||vis[v])continue;
dis[v]=dis[u]+w;
dfs(v,u);
}
}
void calc(int u){
num[0]=1;
for(auto p:G[u]){
int v=p.first,w=p.second;
if(vis[v])continue;
cnt=0;
dis[v]=w;
dfs(v,u);
for(int i=1;i<=cnt;++i)ans+=num[(3-d[i]%3)%3];
for(int i=1;i<=cnt;++i)++num[d[i]%3];
}
num[0]=num[1]=num[2]=0;
}
void solve(int u){
calc(u);
vis[u]=1;
for(auto p:G[u]){
int v=p.first;
if(vis[v])continue;
center=0;
f[0]=tot=sz[v];
getcenter(v,0);
getcenter(center,0);
solve(center);
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin>>n;
for(int i=1;i<n;++i){
cin>>u>>v>>w;
G[u].push_back({v,w});
G[v].push_back({u,w});
}
f[0]=tot=n;
getcenter(1,0);
getcenter(center,0);
solve(center);
a=ans*2+n;
b=n*n;
c=__gcd(a,b);
cout<<a/c<<'/'<<b/c;
return 0;
}