#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T rd() {
  T nmb = 0;
  int sgn = 0;
  char chr = getchar();
  while (!isdigit(chr)) {
    if (chr == '-') sgn = 1;
    chr = getchar();
  }
  while (isdigit(chr)) {
    nmb = (nmb << 3) + (nmb << 1) + chr - '0';
    chr = getchar();
  }
  return sgn ? -nmb : nmb;
}
template <typename T>
void wt(T nmb) {
  if (nmb > 9) wt(nmb / 10);
  putchar(nmb % 10 + '0');
}
template <typename T>
inline void cmax(T &x, T y) {
  x = x > y ? x : y;
}
template <typename T>
inline void cmin(T &x, T y) {
  x = x < y ? x : y;
}
inline void proc_status() {
  ifstream t("/proc/self/status");
  cerr << string(istreambuf_iterator<char>(t), istreambuf_iterator<char>())
       << endl;
}
const int N = 52;
double fac[N];
inline void getfac(int n) {
  fac[0] = 1;
  for (int i = 1; i <= n; ++i) fac[i] = fac[i - 1] * i;
}
inline double C(int n, int m) {
  if (n < 0 || m < 0 || n < m) return 0;
  return fac[n] / fac[m] / fac[n - m];
}
vector<int> g[N];
int siz[N];
double dp[N][N], nw[N], tmp[N];
void dfs(int x, int f) {
  siz[x] = 1;
  dp[x][0] = 1;
  for (int t = g[x].size() - 1; ~t; --t) {
    int k = g[x][t];
    if (k == f) continue;
    dfs(k, x);
    for (int i = 0; i <= siz[k]; ++i) {
      nw[i] = 0;
      for (int j = 0; j < i; ++j) nw[i] += dp[k][j] * 0.5;
      nw[i] += dp[k][i] * (siz[k] - i);
    }
    for (int i = 0; i < siz[x] + siz[k]; ++i) tmp[i] = 0;
    for (int i = 0; i < siz[x]; ++i)
      for (int j = 0; j <= siz[k]; ++j)
        tmp[i + j] += dp[x][i] * nw[j] * C(i + j, i) *
                      C(siz[x] - 1 - i + siz[k] - j, siz[x] - 1 - i);
    for (int i = 0; i < siz[x] + siz[k]; ++i) dp[x][i] = tmp[i];
    siz[x] += siz[k];
  }
}
int main() {
  int n = rd<int>();
  for (int i = 1; i < n; ++i) {
    int x = rd<int>(), y = rd<int>();
    g[x].push_back(y), g[y].push_back(x);
  }
  getfac(n - 1);
  for (int x = 1; x <= n; ++x) {
    dfs(x, 0);
    printf("%.6lf\n", dp[x][n - 1] / fac[n - 1]);
  }
  return 0;
}
