#include <bits/stdc++.h>
using namespace std;
namespace io {
const int SIZE = (1 << 21) + 1;
char ibuf[SIZE], *iS, *iT, obuf[SIZE], *oS = obuf, *oT = oS + SIZE - 1, c,
                                       qu[55];
int f, qr;
inline void flush() {
  fwrite(obuf, 1, oS - obuf, stdout);
  oS = obuf;
}
inline void pc(char x) {
  *oS++ = x;
  if (oS == oT) flush();
}
inline void gtc(char &x) {
  x = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, SIZE, stdin),
                   (iS == iT ? EOF : *iS++))
                : *iS++);
}
template <class I>
inline void gi(I &x) {
  for (f = 1, c = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, SIZE, stdin),
                              (iS == iT ? EOF : *iS++))
                            : *iS++);
       c < '0' || c > '9';
       c = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, SIZE, stdin),
                       (iS == iT ? EOF : *iS++))
                     : *iS++))
    if (c == '-') f = -1;
  for (x = 0; c <= '9' && c >= '0';
       c = (iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, SIZE, stdin),
                       (iS == iT ? EOF : *iS++))
                     : *iS++))
    x = x * 10 + (c & 15);
  x *= f;
}
template <class I>
inline void print(I x) {
  if (!x) pc('0');
  if (x < 0) pc('-'), x = -x;
  while (x) qu[++qr] = x % 10 + '0', x /= 10;
  while (qr) pc(qu[qr--]);
}
struct Flusher_ {
  ~Flusher_() { flush(); }
} io_flusher_;
}  // namespace io
using io ::gi;
using io ::gtc;
using io ::pc;
using io ::print;
template <typename T>
inline void chkmax(T &a, T b) {
  a = a > b ? a : b;
}
template <typename T>
inline void chkmin(T &a, T b) {
  a = a < b ? a : b;
}
template <typename T>
inline T gcd(T &a, T b) {
  return !b ? a : gcd(b, a % b);
}
const int mod = 998244353;
template <typename T>
const T Mod(T x) {
  return x >= mod * 2 ? x % mod : (x >= mod ? x - mod : x);
}
template <typename T>
const void Add(T &a, T b) {
  a = Mod(a + b);
}
const int MAXN = 55;
const int Inv = 499122177;
long double f[MAXN + 1][MAXN + 1];
long double g[MAXN + 1][MAXN + 1];
int tot;
int to[MAXN << 1];
int ne[MAXN << 1];
int fi[MAXN + 1];
inline long double C(int n, int m) {
  long double res = 1;
  for (int i = m + 1; i <= n; i++) {
    res = res * i / (i - m);
  }
  return res;
}
inline void Link(int u, int v) {
  tot++;
  to[tot] = v;
  ne[tot] = fi[u];
  fi[u] = tot;
}
int si[MAXN + 1];
inline void calc(int x, int la) {
  si[x] = 1;
  f[x][0] = 1;
  g[x][0] = 0;
  long double tf[MAXN + 1];
  for (int i = fi[x]; i; i = ne[i]) {
    int u = to[i];
    if (u == la) continue;
    calc(u, x);
    for (int i = 0; i < si[x] + si[u]; i++) tf[i] = 0;
    for (int j = 0; j < si[x]; j++)
      for (int k = 0; k <= si[u]; k++)
        tf[j + k] += 1.0 * f[x][j] * g[u][k] * C(j + k, j) *
                     C(si[x] + si[u] - 1 - j - k, si[u] - k);
    si[x] += si[u];
    for (int j = 0; j < si[x]; j++) f[x][j] = tf[j];
  }
  for (int i = 0; i < si[x]; i++) {
    g[x][i] += f[x][i] * (si[x] - i);
    for (int j = i + 1; j <= si[x]; j++) g[x][j] += f[x][i] * 0.5;
  }
}
int main() {
  int n;
  gi(n);
  for (int i = 1; i < n; i++) {
    int u, v;
    gi(u), gi(v);
    Link(u, v), Link(v, u);
  }
  long double ifac = 1;
  for (int i = 1; i < n; i++) ifac /= i;
  for (int i = 1; i <= n; i++) {
    memset(f, 0, sizeof(f));
    memset(g, 0, sizeof(g));
    memset(si, 0, sizeof(si));
    calc(i, i);
    long double res = f[i][n - 1];
    res = res * ifac;
    cout << res << endl;
  }
  return 0;
}
