#include <bits/stdc++.h>
using namespace std;
const int N = 60;
int n;
long double fac[N];
long double dp[N][N];
long double tr[N];
int v[2 * N];
int x[2 * N];
int ct;
int al[N];
int siz[N];
inline void add(int u, int V) {
  v[++ct] = V;
  x[ct] = al[u];
  al[u] = ct;
}
inline long double c(int n, int m) { return fac[n] / fac[m] / fac[n - m]; }
inline void dfs(int u, int f) {
  siz[u] = 1;
  dp[u][0] = 1;
  for (int i = al[u]; i; i = x[i]) {
    if (v[i] == f) continue;
    dfs(v[i], u);
    for (int j = 0; j < siz[u] + siz[v[i]]; j++) tr[j] = 0;
    int tot = siz[u] + siz[v[i]] - 1;
    for (int p = 0; p < siz[u]; p++)
      for (int q = 0; q <= siz[v[i]]; q++)
        tr[p + q] += dp[u][p] * dp[v[i]][q] * c(p + q, p) *
                     c(tot - p - q, siz[v[i]] - q);
    siz[u] += siz[v[i]];
    for (int j = 0; j < siz[u]; j++) dp[u][j] = tr[j];
  }
  if (f != 0) {
    for (int i = 0; i <= siz[u]; i++) tr[i] = 0;
    for (int i = 0; i < siz[u]; i++) {
      tr[i] += (siz[u] - i) * dp[u][i];
      for (int j = i + 1; j <= siz[u]; j++) tr[j] += dp[u][i] * 0.5;
    }
    for (int i = 0; i <= siz[u]; i++) dp[u][i] = tr[i];
  }
  return;
}
int main() {
  fac[0] = 1;
  for (int i = 1; i <= 50; i++) fac[i] = fac[i - 1] * i;
  scanf("%d", &n);
  for (int i = 1, u, v; i < n; i++) scanf("%d%d", &u, &v), add(u, v), add(v, u);
  for (int i = 1; i <= n; i++) {
    dfs(i, 0);
    printf("%.10lf\n", (double)dp[i][n - 1] / (double)fac[n - 1]);
  }
  return 0;
}
