#include <bits/stdc++.h>
using namespace std;
bool home = 1;
signed realMain();
signed main() {
  home = 0;
  if (home) {
    freopen("input", "r", stdin);
  } else {
    ios::sync_with_stdio(0);
    cin.tie(0);
  }
  realMain();
}
const long long M = (long long)1e9 + 7;
long long add(long long a, long long b) {
  a += b;
  if (a >= M) return a - M;
  if (a < 0) return a + M;
  return a;
}
long long mul(long long a, long long b) { return a * (long long)b % M; }
long long pw(long long a, long long b) {
  long long r = 1;
  while (b) {
    if (b & 1) {
      r = mul(r, a);
    }
    a = mul(a, a);
    b /= 2;
  }
  return r;
}
long long dv(long long a, long long b) { return mul(a, pw(b, M - 2)); }
const long long N = 100 + 7;
long long n, dp[N][N][N], sub[N], ret[N];
vector<long long> g[N];
long long old[N][N];
long long nw[N][N];
void baga(long long &x, long long val) { x = add(x, val); }
void dfs(long long a, long long p = -1) {
  vector<long long> kids;
  sub[a] = 1;
  for (auto &b : g[a]) {
    if (b == p) continue;
    dfs(b, a);
    kids.push_back(b);
    sub[a] += sub[b];
  }
  g[a] = kids;
  long long cur = 1;
  old[1][0] = 1;
  for (auto &b : g[a]) {
    for (long long sz = 1; sz <= cur; sz++) {
      for (long long cnt = 0; cnt < cur; cnt++) {
        if (!old[sz][cnt]) continue;
        for (long long sb = 1; sb <= sub[b]; sb++) {
          for (long long cb = 0; cb < sub[b]; cb++) {
            long long prod = mul(old[sz][cnt], dp[b][sb][cb]);
            baga(nw[sz + sb][cnt + cb], prod);
            baga(nw[sz][cnt + cb + 1], mul(prod, sb));
          }
        }
      }
    }
    cur += sub[b];
    for (long long sz = 0; sz <= cur; sz++) {
      for (long long cnt = 0; cnt < cur; cnt++) {
        old[sz][cnt] = nw[sz][cnt];
        nw[sz][cnt] = 0;
      }
    }
  }
  assert(cur == sub[a]);
  for (long long sz = 1; sz <= cur; sz++) {
    for (long long cnt = 0; cnt < cur; cnt++) {
      dp[a][sz][cnt] = old[sz][cnt];
    }
  }
}
long long fact[N], ifact[N];
long long comb(long long n, long long k) {
  return mul(fact[n], mul(ifact[k], ifact[n - k]));
}
signed realMain() {
  fact[0] = 1;
  for (long long i = 1; i < N; i++) fact[i] = mul(fact[i - 1], i);
  ifact[N - 1] = dv(1, fact[N - 1]);
  for (long long i = N - 2; i >= 0; i--) ifact[i] = mul(ifact[i + 1], i + 1);
  cin >> n;
  for (long long i = 1; i < n; i++) {
    long long x, y;
    cin >> x >> y;
    g[x].push_back(y);
    g[y].push_back(x);
  }
  dfs(1);
  for (long long last = 1; last <= n; last++) {
    for (long long cnt = 0; cnt <= n - 1; cnt++) {
      long long now = mul(dp[1][last][cnt], last);
      ret[n - 1 - cnt] = add(ret[n - 1 - cnt], now);
    }
  }
  for (long long k = 0; k < n; k++) {
    if (n - k >= 2) {
      ret[k] = mul(ret[k], pw(n, n - k - 2));
    } else {
      ret[k] = 1;
    }
  }
  for (long long i = n - 1; i >= 0; i--) {
    for (long long j = i + 1; j < n; j++) {
      ret[i] = add(ret[i], -mul(ret[j], comb(j, i)));
    }
  }
  for (long long i = 0; i < n; i++) {
    cout << ret[i] << " ";
  }
  cout << "\n";
  return 0;
}
