#include <bits/stdc++.h>
using namespace std;
const int maxn = 105, tt = 1e9 + 7;
int n, lnk[maxn], son[2 * maxn], nxt[2 * maxn], Y[maxn], X[maxn],
    mat[maxn][maxn], F[maxn], fn[maxn];
struct edge {
  int x, y;
} e[maxn];
int qsm(int x, int y) {
  int ret = 1;
  while (y) {
    if (y & 1) ret = 1ll * ret * x % tt;
    y >>= 1, x = 1ll * x * x % tt;
  }
  return ret;
}
int gauss() {
  int ret = 1;
  for (int i = 1; i < n; i++) {
    if (mat[i][i] == 0) return 0;
    ret = 1ll * ret * mat[i][i] % tt;
    for (int j = i + 1; j < n; j++) {
      int tmp = 1ll * mat[j][i] * qsm(mat[i][i], tt - 2) % tt;
      for (int k = 1; k < n; k++)
        mat[j][k] = (mat[j][k] + tt - 1ll * mat[i][k] * tmp % tt) % tt;
    }
  }
  return ret;
}
int matrixt(int V) {
  memset(mat, 0, sizeof(mat));
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (i != j)
        mat[i][j] = (mat[i][j] + tt - 1) % tt, mat[i][i] = (mat[i][i] + 1) % tt;
  for (int i = 1; i < n; i++) {
    int x = e[i].x, y = e[i].y;
    mat[x][x] = (mat[x][x] + V - 1) % tt, mat[y][y] = (mat[y][y] + V - 1) % tt;
    mat[x][y] = (mat[x][y] + tt - (V - 1)) % tt,
    mat[y][x] = (mat[y][x] + tt - (V - 1)) % tt;
  }
  return gauss();
}
void solve() {
  for (int i = 1; i <= n; i++) {
    int mul = Y[i];
    for (int j = 1; j <= n; j++)
      if (j != i) mul = 1ll * mul * qsm((X[i] - X[j] + tt) % tt, tt - 2) % tt;
    memset(fn, 0, sizeof(fn));
    fn[0] = 1;
    for (int j = 1; j <= n; j++)
      if (j != i) {
        for (int k = n; k >= 1; k--)
          fn[k] = (1ll * fn[k] * (tt - X[j]) % tt + fn[k - 1]) % tt;
        fn[0] = 1ll * fn[0] * (tt - X[j]) % tt;
      }
    for (int j = 0; j <= n; j++) F[j] = (F[j] + 1ll * fn[j] * mul % tt) % tt;
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) scanf("%d%d", &e[i].x, &e[i].y);
  for (int i = 1; i <= n; i++) Y[i] = matrixt(i), X[i] = i;
  solve();
  for (int i = 0; i < n; i++) printf("%d ", F[i]);
  puts("");
  return 0;
}
