#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <iomanip>
using namespace std;
const int N=100005;
int n;
struct edge{
       int x,y,L;edge *next;
       edge(int x,int y,int L,edge *next):x(x),y(y),L(L),next(next){}
}*ls[N];
int cnt;
int Size[N];
long long Sum[N];
vector <int> QQ[N];

bool cmp(int x,int y){
     return Size[y]*Sum[x]<Size[x]*Sum[y];
}

long long dfs(int p,int fa){
     long long ret=0;
     vector <int> &Q=QQ[p];
     Q.clear();
     Size[p]=cnt++;
     Sum[p]=0;
     for (edge *t=ls[p];t;t=t->next)
         if (t->y!=fa){
            ret+=dfs(t->y,p);
            ret+=t->L*Size[t->y];
            Q.push_back(t->y);
            Sum[p]+=Sum[t->y]+t->L*2;
            Sum[t->y]+=t->L*2;
         }
     if (!Q.empty()){
          sort(Q.begin(),Q.end(),cmp);
          long long tmp=0;
          for (int i=1;i<Q.size();i++){
              tmp+=Sum[Q[i-1]];
              ret+=tmp*Size[Q[i]];
          }
     }
     Size[p]=cnt-Size[p];
     return ret;
}

int main(){
    scanf("%d",&n);
    for (int i=1;i<n;i++){
        int x,y,L;
        scanf("%d%d%d",&x,&y,&L);
        ls[x]=new edge(x,y,L,ls[x]);
        ls[y]=new edge(y,x,L,ls[y]);
    }
    cout << fixed << setprecision(10) << 1.0*dfs(1,0)/(n-1) << endl;
}