#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("unroll-loops")
const long long max_sz = 1e5 + 1;
const long long mod = 1e9 + 7;
const long long MAXN = 4e18 + 1;
const int N = 500023;
char flip(char k) {
  if (k == '0') return '1';
  return '0';
}
long long sum_digit(long long n) {
  long long a = 0, i;
  for (i = n; i > 0; i = i / 10) {
    a += (i % 10);
  }
  return a;
}
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
bool isPowerOfTwo(int n) {
  if (n == 0) return false;
  return (ceil(log2(n)) == floor(log2(n)));
}
long long expo(long long a, long long b, long long m);
vector<bool> vis;
vector<vector<long long> > g;
void ipgraph(long long m) {
  long long u, v;
  while (m--) {
    cin >> u >> v;
    u--, v--;
    g[u].push_back(v);
    g[v].push_back(u);
  }
}
long double jhc = 0.0;
void dfs(long long i, long long lvl, long double p) {
  vis[i] = true;
  if (i != 0 && g[i].size() != 1)
    p *= 1.0 / (g[i].size() - 1);
  else if (i == 0)
    p *= 1.0 / (g[i].size());
  else
    p = p;
  for (auto j : g[i]) {
    if (!vis[j]) {
      dfs(j, lvl + 1, p);
    }
  }
  if (g[i].size() == 1 && i != 0) {
    jhc += p * lvl;
  }
}
void solve() {
  long long i, j, n, m, k;
  cin >> n;
  vis.assign(n, false);
  g.assign(n, {});
  ipgraph(n - 1);
  dfs(0, 0, 1);
  printf("%.15Lf", jhc);
}
int main() {
  long long t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
long long expo(long long a, long long b, long long m) {
  if (b == 0) return 1;
  long long p = expo(a, b / 2, m) % m;
  p = (p * p) % m;
  return (b % 2 == 0) ? p : (a * p) % m;
}
