#include <bits/stdc++.h>
using std::vector;
const int N = 55;
int n;
vector<int> G[N];
int size[N];
long double fact[N];
long double dp[N][N], tmp[N], g[N];
inline long double choose(int n, int m) {
  return fact[n] / (fact[m] * fact[n - m]);
}
void dfs(int now, int father) {
  register int i, j;
  dp[now][0] = 1;
  size[now] = 1;
  for (auto x : G[now]) {
    if (x == father) continue;
    dfs(x, now);
    for (i = 0; i <= size[x]; i++) {
      g[i] = 0;
      for (j = 1; j <= size[x]; j++)
        if (j <= i)
          g[i] += 0.5 * dp[x][j - 1];
        else
          g[i] += dp[x][i];
    }
    for (i = 0; i < size[now] + size[x]; i++) tmp[i] = 0;
    for (i = 0; i < size[now]; i++)
      for (j = 0; j <= size[x]; j++)
        tmp[i + j] +=
            dp[now][i] * g[j] * choose(i + j, i) *
            choose(size[now] - 1 - i + size[x] - j, size[now] - 1 - i);
    for (i = 0; i < size[now] + size[x]; i++) dp[now][i] = tmp[i];
    size[now] += size[x];
  }
  return;
}
signed main() {
  int x, y;
  register int i;
  scanf("%d", &n);
  fact[0] = 1;
  for (i = 1; i <= n - 1; i++) fact[i] = fact[i - 1] * i;
  for (i = 1; i <= n - 1; i++) {
    scanf("%d%d", &x, &y);
    G[x].push_back(y);
    G[y].push_back(x);
  }
  for (i = 1; i <= n; i++) {
    dfs(i, 0);
    printf("%.9lf\n", (double)(dp[i][n - 1] / fact[n - 1]));
  }
}
