#include <bits/stdc++.h>
const int maxn = 55;
const int maxe = maxn * 3;
struct edge {
  int t, next;
} e[maxe];
int tot, head[maxn];
inline void add(int s, int t) {
  e[tot].t = t;
  e[tot].next = head[s];
  head[s] = tot++;
}
std::vector<double> ms[maxe];
double fact[maxn];
inline double C(int n, int m) { return fact[n] / (fact[n - m] * fact[m]); }
inline void expand(std::vector<double> a, std::vector<double> b,
                   std::vector<double>& ans) {
  for (unsigned i = 0; i < a.size(); i++) a[i] *= C(a.size() - 1, i);
  for (unsigned j = 0; j < b.size(); j++) b[j] *= C(b.size() - 1, j);
  ans.clear();
  ans.resize(a.size() + b.size() - 1);
  for (unsigned i = 0; i < a.size(); i++)
    for (unsigned j = 0; j < b.size(); j++) ans[i + j] += a[i] * b[j];
  for (unsigned i = 0; i < ans.size(); i++) ans[i] /= C(ans.size() - 1, i);
}
inline std::vector<double> solve(int ind, int fa) {
  if (ms[ind].size()) return ms[ind];
  std::vector<double> ans(1, 1.0);
  for (int i = head[e[ind].t]; i != -1; i = e[i].next)
    if (e[i].t != fa) expand(solve(i, e[ind].t), ans, ans);
  if (!fa) return ans;
  std::vector<double>& ret = ms[ind];
  ret.resize(ans.size() + 1);
  double prefix = ret[0] = ans[0];
  for (unsigned i = 1; i < ans.size(); i++) {
    ret[i] = (prefix / 2 + ans[i] * (ans.size() - i)) / ans.size();
    prefix += ans[i];
  }
  ret[ans.size()] = (prefix / (ans.size() * 2));
  return ret;
}
int main() {
  memset(head, -1, sizeof(head));
  int n;
  scanf("%d", &n);
  fact[0] = 1;
  for (int i = 1; i <= n; i++) fact[i] = fact[i - 1] * i;
  for (int i = 1, a, b; i < n; i++) {
    scanf("%d%d", &a, &b);
    add(a, b);
    add(b, a);
  }
  for (int i = n; i >= 1; i--) add(0, i);
  for (int i = head[0]; i != -1; i = e[i].next)
    printf("%.9f\n", *--solve(i, 0).end());
}
