#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9 + 7;
const long long INF = 1e18L + 7;
template <class n, class second>
ostream &operator<<(ostream &p, pair<n, second> x) {
  return p << "<" << x.first << ", " << x.second << ">";
}
template <class n>
auto operator<<(ostream &p, n y) ->
    typename enable_if<!is_same<n, string>::value,
                       decltype(y.begin(), p)>::type {
  int o = 0;
  p << "{";
  for (auto c : y) {
    if (o++) p << ", ";
    p << c;
  }
  return p << "}";
}
void dor() { cerr << '\n'; }
template <class n, class... second>
void dor(n p, second... y) {
  cerr << p << " ";
  dor(y...);
}
template <class n, class second>
void mini(n &p, second y) {
  if (p > y) p = y;
}
template <class n, class second>
void maxi(n &p, second y) {
  if (p < y) p = y;
}
const int N = 57;
int n;
vector<int> G[N];
long double kom[N][N][N][N];
long double bez[N][N];
long double kra[N][N];
int sub[N];
void merge(int v, int u) {
  long double tmp[N];
  memset(tmp, 0, sizeof tmp);
  for (int i = 0; i <= sub[v]; ++i) {
    for (int j = 0; j <= sub[u]; ++j) {
      tmp[i + j] +=
          bez[v][i] * kra[u][j] * kom[sub[v] + sub[u]][i + j][sub[v]][i];
    }
  }
  memcpy(bez[v], tmp, sizeof bez[v]);
  sub[v] += sub[u];
}
void dfs(int v, int p) {
  bez[v][0] = 1;
  for (auto u : G[v]) {
    if (u == p) continue;
    dfs(u, v);
    merge(v, u);
    ;
  }
  sub[v]++;
  if (v == 1)
    ;
  for (int second = 0; second <= sub[v]; ++second) {
    for (int wyb = 1; wyb <= sub[v]; ++wyb) {
      int oki = max(wyb - 1, second - 1);
      long double prob = 1.0 / sub[v];
      if (wyb > second) prob /= 2;
      kra[v][second] += bez[v][oki] * prob;
    }
  }
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  for (int i = 0; i < N; ++i) {
    for (int j = 0; j <= i; ++j) {
      kom[i][j][0][0] = 1;
    }
  }
  for (int i = 1; i < N; ++i) {
    for (int j = 0; j < N; ++j) {
      for (int k = 1; k < N; ++k) {
        for (int l = 0; l < N; ++l) {
          long double ok = (long double)j / i;
          if (j > 0 && l > 0)
            kom[i][j][k][l] += ok * kom[i - 1][j - 1][k - 1][l - 1];
          kom[i][j][k][l] += (1 - ok) * kom[i - 1][j][k - 1][l];
        }
      }
    }
  };
  cout << fixed << setprecision(15);
  cin >> n;
  if (n == 1) {
    cout << 1 << '\n';
    return 0;
  }
  for (int i = 1; i < n; ++i) {
    int a, b;
    cin >> a >> b;
    G[a].push_back(b);
    G[b].push_back(a);
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      memset(bez[j], 0, sizeof bez[j]);
      memset(kra[j], 0, sizeof kra[j]);
    }
    memset(sub, 0, sizeof sub);
    dfs(i, -1);
    cout << bez[i][0] << '\n';
  }
}
