func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize( Ofast )   #pragma GCC optimize( O3 )   #pragma GCC optimize( O2 )   #pragma GCC optimize( inline )   #pragma GCC target( sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native )   #pragma GCC optimize( unroll-loops )   using namespace std;   const int INF = 1e9 + 7;   int n;   vector<int> G[55];   double dp[55][55][55][55];   int vis[55][55];   double tmp[55][55];   long long C[55][55];   double cpro[55][55][55][55];   void merge_dp(int asz, double a[][55], int bsz, double b[][55],                 double ret[][55]) {     for (int i = 0; i <= asz + bsz; i++)       for (int j = 0; j <= asz + bsz; j++) ret[i][j] = 0;     for (int ia = 0; ia <= asz; ia++)       for (int ja = 0; ja <= asz; ja++)         for (int ib = 0; ib <= bsz; ib++)           for (int jb = 0; jb <= bsz; jb++) {             if (ia == 0 && ib == 0) {               ret[ia + ib][0] = a[ia][0] * b[ib][0];               continue;             }             for (int jt = ja + jb; jt <= asz + bsz; jt++)               ret[ia + ib][jt] +=                   a[ia][ja] * b[ib][jb] *                   (cpro[jt][ja][asz][bsz] + cpro[jt][jb][bsz][asz]) /                   C[asz + bsz][asz];           }   }   int dfs(int v, int par) {     if (vis[v][par]) return vis[v][par];     int tsz = 0;     dp[v][par][0][0] = 1.0;     for (int i = 0; i < (int)(G[v].size()); i++) {       int u = G[v][i];       if (u == par) continue;       int csz = dfs(u, v);       merge_dp(tsz, dp[v][par], csz, dp[u][v], tmp);       tsz += csz;       for (int j = 0; j <= tsz; j++)         for (int k = 0; k <= tsz; k++) dp[v][par][j][k] = tmp[j][k];     }     if (par > 0) {       for (int i = 0; i <= tsz; i++)         for (int j = 0; j <= tsz; j++) {           tmp[i][j] = dp[v][par][i][j];           dp[v][par][i][j] *= 1 - 1.0 * j / (tsz + 1);         }       for (int i = 0; i <= tsz; i++)         for (int j = 0; j <= tsz; j++)           for (int k = j; k <= tsz; k++)             dp[v][par][i + 1][k + 1] += tmp[i][j] * (1.0 / (tsz + 1));       tsz++;     }     return vis[v][par] = tsz;   }   double aa[55];   double gen_ans(int v) {     dfs(v, 0);     memset(aa, 0, sizeof(aa));     for (int i = 0; i <= n; i++)       for (int j = 0; j <= n; j++) aa[i] += dp[v][0][i][j];     for (int i = n; i >= 0; i--)       for (int j = n; j > i; j--) aa[i] -= C[j][i] * aa[j];     double ret = 0.0, t = 1.0;     for (int i = 0; i <= n; i++) {       ret = ret + aa[i] * t;       t *= 0.5;     }     return ret;   }   void init_C() {     C[0][0] = 1;     for (int i = 1; i <= (int)(n); i++) {       C[i][0] = 1;       for (int j = 1; j <= (int)(n); j++) C[i][j] = C[i - 1][j] + C[i - 1][j - 1];     }     for (int a = 0; a <= n; a++)       for (int b = 0; a + b <= n; b++)         for (int ja = 0; ja <= a; ja++)           for (int jt = ja; jt <= a + b; jt++)             if (ja > 0)               cpro[jt][ja][a][b] = C[jt - 1][ja - 1] * C[a + b - jt][a - ja];             else               cpro[jt][ja][a][b] = 0;   }   int main() {     scanf( %d , &n);     init_C();     for (int i = 0; i < (int)(n - 1); i++) {       int u, v;       scanf( %d%d , &u, &v);       G[u].push_back(v);       G[v].push_back(u);     }     for (int i = 1; i <= (int)(n); i++) printf( %.8lf n , gen_ans(i));     return 0;   }   