#include<bits/stdc++.h>
using namespace std;
struct edge{ int to,cost; };

double p;
int N;
vector<edge> G[100005];

double x[100005];

void dfs(int pos,int prev){
  x[pos]=0;
  for(int i=0;i<(int)G[pos].size();i++){
    edge e=G[pos][i];
    if(e.to==prev)continue;
    dfs(e.to,pos);
    x[pos]+=(double)(x[e.to]+e.cost)*p;
  }
}

double solve(int pos,int prev){
  double res=x[0];
  for(int i=0;i<(int)G[pos].size();i++){
    edge e=G[pos][i];
    if(e.to==prev)continue;
    res+=( solve(e.to,pos) + e.cost )*p;
  }
  return res;
}

int main(){
  cin>>p;
  cin>>N;
  for(int i=0;i<N-1;i++){
    int a,b,c;
    cin>>a>>b>>c;
    a--,b--;
    G[a].push_back( (edge){b,c} );
    G[b].push_back( (edge){a,c} );
  }
  dfs(0,-1);
  /*
  for(int id=0;id<N;id++){
    printf("%d %.10f\n", id,x[id]);
  }
  */
  printf("%.10f\n", solve(0,-1));
  return 0;
}