func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = 1e9 + 7;   const long long INF = 1e18L + 7;   template <class n, class second>   ostream &operator<<(ostream &p, pair<n, second> x) {     return p <<  <  << x.first <<  ,   << x.second <<  > ;   }   template <class n>   auto operator<<(ostream &p, n y) ->       typename enable_if<!is_same<n, string>::value,                          decltype(y.begin(), p)>::type {     int o = 0;     p <<  { ;     for (auto c : y) {       if (o++) p <<  ,  ;       p << c;     }     return p <<  } ;   }   void dor() { cerr <<   n ; }   template <class n, class... second>   void dor(n p, second... y) {     cerr << p <<    ;     dor(y...);   }   template <class n, class second>   void mini(n &p, second y) {     if (p > y) p = y;   }   template <class n, class second>   void maxi(n &p, second y) {     if (p < y) p = y;   }   const int N = 57;   int n;   vector<int> G[N];   long double kom[N][N][N][N];   long double bez[N][N];   long double kra[N][N];   int sub[N];   void merge(int v, int u) {     long double tmp[N];     memset(tmp, 0, sizeof tmp);     for (int i = 0; i <= sub[v]; ++i) {       for (int j = 0; j <= sub[u]; ++j) {         tmp[i + j] +=             bez[v][i] * kra[u][j] * kom[sub[v] + sub[u]][i + j][sub[v]][i];       }     }     memcpy(bez[v], tmp, sizeof bez[v]);     sub[v] += sub[u];   }   void dfs(int v, int p) {     bez[v][0] = 1;     for (auto u : G[v]) {       if (u == p) continue;       dfs(u, v);       merge(v, u);       ;     }     sub[v]++;     if (v == 1)       ;     for (int second = 0; second <= sub[v]; ++second) {       for (int wyb = 1; wyb <= sub[v]; ++wyb) {         int oki = max(wyb - 1, second - 1);         long double prob = 1.0 / sub[v];         if (wyb > second) prob /= 2;         kra[v][second] += bez[v][oki] * prob;       }     }   }   int32_t main() {     ios_base::sync_with_stdio(0);     cin.tie(NULL);     for (int i = 0; i < N; ++i) {       for (int j = 0; j <= i; ++j) {         kom[i][j][0][0] = 1;       }     }     for (int i = 1; i < N; ++i) {       for (int j = 0; j < N; ++j) {         for (int k = 1; k < N; ++k) {           for (int l = 0; l < N; ++l) {             long double ok = (long double)j / i;             if (j > 0 && l > 0)               kom[i][j][k][l] += ok * kom[i - 1][j - 1][k - 1][l - 1];             kom[i][j][k][l] += (1 - ok) * kom[i - 1][j][k - 1][l];           }         }       }     };     cout << fixed << setprecision(15);     cin >> n;     if (n == 1) {       cout << 1 <<   n ;       return 0;     }     for (int i = 1; i < n; ++i) {       int a, b;       cin >> a >> b;       G[a].push_back(b);       G[b].push_back(a);     }     for (int i = 1; i <= n; ++i) {       for (int j = 1; j <= n; ++j) {         memset(bez[j], 0, sizeof bez[j]);         memset(kra[j], 0, sizeof kra[j]);       }       memset(sub, 0, sizeof sub);       dfs(i, -1);       cout << bez[i][0] <<   n ;     }   }   