#include <bits/stdc++.h>
using namespace std;
const int maxn = 110, mod = 1e9 + 7;
template <typename Tp>
inline int getmin(Tp &x, Tp y) {
  return y < x ? x = y, 1 : 0;
}
template <typename Tp>
inline int getmax(Tp &x, Tp y) {
  return y > x ? x = y, 1 : 0;
}
template <typename Tp>
inline void read(Tp &x) {
  x = 0;
  int f = 0;
  char ch = getchar();
  while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
  if (ch == '-') f = 1, ch = getchar();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  if (f) x = -x;
}
struct Edge {
  int u, v;
} e[maxn];
int n, tmp, sgn, y[maxn], dw[maxn], cp[maxn], g[maxn], f[maxn], fac[maxn],
    inv[maxn];
int a[maxn][maxn];
int pls(int x, int y) { return x + y >= mod ? x + y - mod : x + y; }
int dec(int x, int y) { return x - y < 0 ? x - y + mod : x - y; }
int power(int x, int y) {
  int res = 1;
  for (; y; y >>= 1, x = (long long)x * x % mod)
    if (y & 1) res = (long long)res * x % mod;
  return res;
}
void gauss() {
  int k, iv;
  sgn = 0;
  for (int i = 1; i < n; i++) {
    k = 0;
    for (int j = i; j < n; j++)
      if (a[j][i]) {
        k = j;
        break;
      }
    if (!k) continue;
    if (k ^ i) {
      swap(a[i], a[k]);
      sgn ^= 1;
    }
    for (int j = 1; j < n; j++)
      if (i ^ j) {
        iv = (long long)a[j][i] * power(a[i][i], mod - 2) % mod;
        for (int r = i; r < n; r++)
          a[j][r] = dec(a[j][r], (long long)a[i][r] * iv % mod);
      }
  }
}
int calc(int x) {
  int res = 1, u, v;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) a[i][j] = dec(0, (i != j));
  for (int i = 1; i <= n; i++) a[i][i] = n - 1;
  for (int i = 1; i < n; i++) {
    u = e[i].u;
    v = e[i].v;
    a[u][v] = dec(a[u][v], dec(x, 1));
    a[v][u] = dec(a[v][u], dec(x, 1));
    a[u][u] += x - 1;
    a[v][v] += x - 1;
  }
  gauss();
  for (int i = 1; i < n; i++) res = (long long)res * a[i][i] % mod;
  if (sgn) res = dec(0, res);
  return res;
}
int main() {
  read(n);
  for (int i = 1; i < n; i++) {
    read(e[i].u);
    read(e[i].v);
  }
  dw[1] = 1;
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = (long long)fac[i - 1] * i % mod;
  inv[n] = power(fac[n], mod - 2);
  for (int i = n - 1; ~i; i--) inv[i] = (long long)inv[i + 1] * (i + 1) % mod;
  for (int i = 1; i <= n; i++) {
    for (int j = n + 1; j; j--)
      dw[j] = dec(dw[j - 1], (long long)i * dw[j] % mod);
    dw[0] = dec(0, (long long)i * dw[0]);
  }
  for (int i = 0; i <= n; i++) {
    y[i] = calc(i);
    memmove(cp, dw, sizeof(cp));
    for (int j = n; ~j; j--) {
      g[j] = cp[j + 1];
      cp[j] = pls(cp[j], (long long)i * g[j] % mod);
    }
    tmp = (long long)y[i] * inv[i] % mod * inv[n - i] % mod;
    if ((n - i) & 1) tmp = dec(0, tmp);
    for (int j = 0; j <= n + 1; j++)
      f[j] = pls(f[j], (long long)tmp * g[j] % mod);
  }
  for (int i = 0; i < n; i++) printf("%d ", f[i]);
  return 0;
}
