#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int n, k, l, E;
int fir[N], nex[N << 1], arr[N << 1], siz[N];
double fac[N], tmp[N], f[N][N];
double C(int x, int y) { return fac[x] / fac[y] / fac[x - y]; }
inline void Add_Edge(int x, int y) {
  nex[++E] = fir[x];
  fir[x] = E;
  arr[E] = y;
}
void dfs(int x, int fa) {
  f[x][0] = 1;
  siz[x] = 1;
  for (int i = fir[x]; i; i = nex[i]) {
    if (arr[i] == fa) continue;
    dfs(arr[i], x);
    for (int j = 0; j <= siz[arr[i]]; ++j) {
      f[0][j] = (siz[arr[i]] - j) * f[arr[i]][j];
      for (int k = 0; k < j; ++k) {
        f[0][j] += 0.5 * f[arr[i]][k];
      }
    }
    for (int j = 0; j <= siz[x]; ++j) {
      tmp[j] = f[x][j];
    }
    for (int j = 0; j <= siz[x] + siz[arr[i]]; ++j) {
      f[x][j] = 0;
    }
    for (int j = 0; j < siz[x]; ++j) {
      for (int k = 0; k <= siz[arr[i]]; ++k) {
        double del = tmp[j] * f[0][k];
        del *= C(j + k, j);
        del *= C(siz[x] - 1 - j + siz[arr[i]] - k, siz[arr[i]] - k);
        f[x][j + k] += del;
      }
    }
    siz[x] += siz[arr[i]];
  }
}
int main() {
  fac[0] = 1;
  for (int i = 1; i < N; ++i) {
    fac[i] = fac[i - 1] * i;
  }
  cin >> n;
  for (int i = 1; i < n; ++i) {
    int x, y;
    cin >> x >> y;
    Add_Edge(x, y);
    Add_Edge(y, x);
  }
  for (int i = 1; i <= n; ++i) {
    memset(f, 0, sizeof f);
    dfs(i, 0);
    printf("%.10lf\n", f[i][n - 1] / fac[n - 1]);
  }
  return 0;
}
