#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 3e5 + 7;
const int LIM = 1000000;
vector<pair<int,int>> g[N];
int n, ans = 0, cntAns = 0;
int siz[N], valid[N], dept[N];
int f[LIM + 5];
vector<int> vec[N];
static long long num[LIM + 5], sum[LIM + 5];
static bool used[LIM + 5];
vector<int> usedList;
void Count(int u, int p){
siz[u] = 1;
for (auto [v,w] : g[u]) if (v != p && !valid[v]){
Count(v,u); siz[u] += siz[v];
}
}
int Centroid(int u, int p, int half){
for (auto [v,w] : g[u]) if (v != p && !valid[v] && siz[v] >= half)
return Centroid(v,u,half);
return u;
}
inline void addNum(int mul, long long d = 0){
if (!used[mul]) {
used[mul] = 1;
usedList.push_back(mul);
}
num[mul]++;
sum[mul] += d;
}
void cal(int u, int p, int id){
if (id == 1){
int k = vec[u].size();
for (int mask = 0; mask < (1<<k); ++mask){
int mul = 1;
for (int i=0;i<k;i++) if(mask&(1<<i)) mul *= vec[u][i];
addNum(mul, dept[u]);
}
} else {
int k = vec[u].size();
for (int mask = 0; mask < (1<<k); ++mask){
int mul = 1;
for (int i=0;i<k;i++) if(mask&(1<<i)) mul *= vec[u][i];
int sign = (__builtin_popcount(mask) % 2 ? -1 : 1);
ans += sign * (dept[u]*num[mul] + sum[mul]);
cntAns += sign * num[mul];
}
}
for (auto [v,w] : g[u]) if (v != p && !valid[v]){
dept[v] = dept[u] + w;
cal(v,u,id);
}
}
void clearMap(){
for (int x : usedList){
num[x] = 0;
sum[x] = 0;
used[x] = 0;
}
usedList.clear();
}
void decomp(int u){
Count(u,0);
int c = Centroid(u,0,siz[u]/2);
valid[c] = 1;
clearMap();
int k = vec[c].size();
for (int mask = 0; mask < (1<<k); ++mask){
int mul = 1;
for (int i=0;i<k;i++) if(mask&(1<<i)) mul *= vec[c][i];
addNum(mul);
}
dept[c] = 0;
for (auto [v,w] : g[c]) if (!valid[v]){
dept[v] = w;
cal(v,c,0);
cal(v,c,1);
}
for (auto [v,w] : g[c]) if (!valid[v]) decomp(v);
}
int32_t main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i=2;i<=n;i++){
int u,v,w; cin >> u >> v >> w;
g[u].push_back({v,w});
g[v].push_back({u,w});
}
for (int i=2;i<=LIM;i++) f[i]=i;
for (int i=2;i*i<=LIM;i++) if(f[i]==i)
for (int j=i*i;j<=LIM;j+=i) if(f[j]==j) f[j]=i;
for (int i=1;i<=n;i++){
int num=i;
while(num>1){
int p=f[num];
vec[i].push_back(p);
while(num%p==0) num/=p;
}
}
decomp(1);
cout << fixed << setprecision(6);
cout << (long double)ans / cntAns << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE4gPSAzZTUgKyA3Owpjb25zdCBpbnQgTElNID0gMTAwMDAwMDsKdmVjdG9yPHBhaXI8aW50LGludD4+IGdbTl07CmludCBuLCBhbnMgPSAwLCBjbnRBbnMgPSAwOwppbnQgc2l6W05dLCB2YWxpZFtOXSwgZGVwdFtOXTsKaW50IGZbTElNICsgNV07CnZlY3RvcjxpbnQ+IHZlY1tOXTsKCnN0YXRpYyBsb25nIGxvbmcgbnVtW0xJTSArIDVdLCBzdW1bTElNICsgNV07CnN0YXRpYyBib29sIHVzZWRbTElNICsgNV07CnZlY3RvcjxpbnQ+IHVzZWRMaXN0OwoKdm9pZCBDb3VudChpbnQgdSwgaW50IHApewogICAgc2l6W3VdID0gMTsKICAgIGZvciAoYXV0byBbdix3XSA6IGdbdV0pIGlmICh2ICE9IHAgJiYgIXZhbGlkW3ZdKXsKICAgICAgICBDb3VudCh2LHUpOyBzaXpbdV0gKz0gc2l6W3ZdOwogICAgfQp9CgppbnQgQ2VudHJvaWQoaW50IHUsIGludCBwLCBpbnQgaGFsZil7CiAgICBmb3IgKGF1dG8gW3Ysd10gOiBnW3VdKSBpZiAodiAhPSBwICYmICF2YWxpZFt2XSAmJiBzaXpbdl0gPj0gaGFsZikKICAgICAgICByZXR1cm4gQ2VudHJvaWQodix1LGhhbGYpOwogICAgcmV0dXJuIHU7Cn0KCmlubGluZSB2b2lkIGFkZE51bShpbnQgbXVsLCBsb25nIGxvbmcgZCA9IDApewogICAgaWYgKCF1c2VkW211bF0pIHsKICAgICAgICB1c2VkW211bF0gPSAxOwogICAgICAgIHVzZWRMaXN0LnB1c2hfYmFjayhtdWwpOwogICAgfQogICAgbnVtW211bF0rKzsKICAgIHN1bVttdWxdICs9IGQ7Cn0KCnZvaWQgY2FsKGludCB1LCBpbnQgcCwgaW50IGlkKXsKICAgIGlmIChpZCA9PSAxKXsKICAgICAgICBpbnQgayA9IHZlY1t1XS5zaXplKCk7CiAgICAgICAgZm9yIChpbnQgbWFzayA9IDA7IG1hc2sgPCAoMTw8ayk7ICsrbWFzayl7CiAgICAgICAgICAgIGludCBtdWwgPSAxOwogICAgICAgICAgICBmb3IgKGludCBpPTA7aTxrO2krKykgaWYobWFzayYoMTw8aSkpIG11bCAqPSB2ZWNbdV1baV07CiAgICAgICAgICAgIGFkZE51bShtdWwsIGRlcHRbdV0pOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgaW50IGsgPSB2ZWNbdV0uc2l6ZSgpOwogICAgICAgIGZvciAoaW50IG1hc2sgPSAwOyBtYXNrIDwgKDE8PGspOyArK21hc2spewogICAgICAgICAgICBpbnQgbXVsID0gMTsKICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8aztpKyspIGlmKG1hc2smKDE8PGkpKSBtdWwgKj0gdmVjW3VdW2ldOwogICAgICAgICAgICBpbnQgc2lnbiA9IChfX2J1aWx0aW5fcG9wY291bnQobWFzaykgJSAyID8gLTEgOiAxKTsKICAgICAgICAgICAgYW5zICs9IHNpZ24gKiAoZGVwdFt1XSpudW1bbXVsXSArIHN1bVttdWxdKTsKICAgICAgICAgICAgY250QW5zICs9IHNpZ24gKiBudW1bbXVsXTsKICAgICAgICB9CiAgICB9CgogICAgZm9yIChhdXRvIFt2LHddIDogZ1t1XSkgaWYgKHYgIT0gcCAmJiAhdmFsaWRbdl0pewogICAgICAgIGRlcHRbdl0gPSBkZXB0W3VdICsgdzsKICAgICAgICBjYWwodix1LGlkKTsKICAgIH0KfQoKdm9pZCBjbGVhck1hcCgpewogICAgZm9yIChpbnQgeCA6IHVzZWRMaXN0KXsKICAgICAgICBudW1beF0gPSAwOwogICAgICAgIHN1bVt4XSA9IDA7CiAgICAgICAgdXNlZFt4XSA9IDA7CiAgICB9CiAgICB1c2VkTGlzdC5jbGVhcigpOwp9Cgp2b2lkIGRlY29tcChpbnQgdSl7CiAgICBDb3VudCh1LDApOwogICAgaW50IGMgPSBDZW50cm9pZCh1LDAsc2l6W3VdLzIpOwogICAgdmFsaWRbY10gPSAxOwoKICAgIGNsZWFyTWFwKCk7CiAgICBpbnQgayA9IHZlY1tjXS5zaXplKCk7CiAgICBmb3IgKGludCBtYXNrID0gMDsgbWFzayA8ICgxPDxrKTsgKyttYXNrKXsKICAgICAgICBpbnQgbXVsID0gMTsKICAgICAgICBmb3IgKGludCBpPTA7aTxrO2krKykgaWYobWFzayYoMTw8aSkpIG11bCAqPSB2ZWNbY11baV07CiAgICAgICAgYWRkTnVtKG11bCk7CiAgICB9CgogICAgZGVwdFtjXSA9IDA7CiAgICBmb3IgKGF1dG8gW3Ysd10gOiBnW2NdKSBpZiAoIXZhbGlkW3ZdKXsKICAgICAgICBkZXB0W3ZdID0gdzsKICAgICAgICBjYWwodixjLDApOwogICAgICAgIGNhbCh2LGMsMSk7CiAgICB9CgogICAgZm9yIChhdXRvIFt2LHddIDogZ1tjXSkgaWYgKCF2YWxpZFt2XSkgZGVjb21wKHYpOwp9CgppbnQzMl90IG1haW4oKXsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKCiAgICBjaW4gPj4gbjsKICAgIGZvciAoaW50IGk9MjtpPD1uO2krKyl7CiAgICAgICAgaW50IHUsdix3OyBjaW4gPj4gdSA+PiB2ID4+IHc7CiAgICAgICAgZ1t1XS5wdXNoX2JhY2soe3Ysd30pOwogICAgICAgIGdbdl0ucHVzaF9iYWNrKHt1LHd9KTsKICAgIH0KCiAgICBmb3IgKGludCBpPTI7aTw9TElNO2krKykgZltpXT1pOwogICAgZm9yIChpbnQgaT0yO2kqaTw9TElNO2krKykgaWYoZltpXT09aSkKICAgICAgICBmb3IgKGludCBqPWkqaTtqPD1MSU07ais9aSkgaWYoZltqXT09aikgZltqXT1pOwoKICAgIGZvciAoaW50IGk9MTtpPD1uO2krKyl7CiAgICAgICAgaW50IG51bT1pOwogICAgICAgIHdoaWxlKG51bT4xKXsKICAgICAgICAgICAgaW50IHA9ZltudW1dOwogICAgICAgICAgICB2ZWNbaV0ucHVzaF9iYWNrKHApOwogICAgICAgICAgICB3aGlsZShudW0lcD09MCkgbnVtLz1wOwogICAgICAgIH0KICAgIH0KCiAgICBkZWNvbXAoMSk7CgogICAgY291dCA8PCBmaXhlZCA8PCBzZXRwcmVjaXNpb24oNik7CiAgICBjb3V0IDw8IChsb25nIGRvdWJsZSlhbnMgLyBjbnRBbnMgPDwgJ1xuJzsKfQ==