func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, size[55];   double f[55][55], fac[55];   int cnt, head[55], to[110], nxt[110];   void add(int x, int y) {     cnt++;     to[cnt] = y;     nxt[cnt] = head[x];     head[x] = cnt;   }   double c(int n, int m) {     if (m < 0 || m > n) {       return 0.0;     } else {       return fac[n] / fac[m] / fac[n - m];     }   }   void dfs(int x, int fa) {     size[x] = 1;     f[x][0] = 1.0;     double tmp[55];     for (int i = head[x]; i; i = nxt[i]) {       int y = to[i];       if (y == fa) {         continue;       }       dfs(y, x);       for (int j = 0; j < size[x] + size[y]; j++) {         tmp[j] = 0.0;       }       for (int j = 0; j < size[y]; j++) {         for (int k = 0; k < size[x]; k++) {           for (int h = j + k + 1; h <= size[y] + k; h++) {             tmp[h] += c(h, k) * c(size[x] + size[y] - 1 - h, size[x] - 1 - k) *                       f[x][k] * f[y][j] / 2.0;           }           tmp[j + k] += 1.0 * (size[y] - j) * c(j + k, j) *                         c(size[x] + size[y] - 1 - j - k, size[x] - 1 - k) *                         f[x][k] * f[y][j];         }       }       size[x] += size[y];       for (int j = 0; j < size[x]; j++) {         f[x][j] = tmp[j];       }     }   }   int main() {     scanf( %d , &n);     for (int i = 1; i < n; i++) {       int x, y;       scanf( %d%d , &x, &y);       add(x, y);       add(y, x);     }     fac[0] = 1.0;     for (int i = 1; i <= n; i++) {       fac[i] = fac[i - 1] * i;     }     for (int i = 1; i <= n; i++) {       dfs(i, 0);       printf( %.10lf n , f[i][n - 1] / fac[n - 1]);     }     return 0;   }   