#include <bits/stdc++.h>
using namespace std;
const int N = 105, mo = 1e9 + 7;
int n, f[N][N][N], Size[N], g[N][N], ans, C[N][N], F[N], tot, h[N], e[N << 1],
    nxt[N << 1];
void Add(int x, int y) {
  e[++tot] = y;
  nxt[tot] = h[x];
  h[x] = tot;
}
void dp(int x, int y) {
  Size[x] = 1;
  f[x][1][1] = 1;
  for (int i = h[x]; i; i = nxt[i])
    if (e[i] != y) {
      dp(e[i], x);
      memset(g, 0, sizeof(g));
      for (int j = 1; j <= Size[x]; j++) {
        for (int p = 1; p <= Size[x] - j + 1; p++)
          if (f[x][j][p]) {
            for (int k = 1; k <= Size[e[i]]; k++) {
              for (int q = 1; q <= Size[e[i]] - k + 1; q++)
                if (f[e[i]][k][q]) {
                  g[j + k][p] = (g[j + k][p] + (long long)f[x][j][p] *
                                                   f[e[i]][k][q] % mo * q) %
                                mo;
                  g[j + k - 1][p + q] =
                      (g[j + k - 1][p + q] +
                       (long long)f[x][j][p] * f[e[i]][k][q]) %
                      mo;
                }
            }
          }
      }
      Size[x] += Size[e[i]];
      memcpy(f[x], g, sizeof(g));
    }
}
int main() {
  scanf("%d", &n);
  for (int i = 1, x, y; i < n; i++) {
    scanf("%d%d", &x, &y);
    Add(x, y);
    Add(y, x);
  }
  dp(1, 0);
  C[0][0] = 1;
  for (int i = 1; i <= n; i++) {
    C[i][0] = 1;
    for (int j = 1; j <= i; j++) C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % mo;
  }
  F[n - 1] = f[1][1][n];
  for (int i = 2; i <= n; i++) {
    F[n - i] = 0;
    for (int j = 1; j <= n - i + 1; j++)
      F[n - i] = (F[n - i] + (long long)f[1][i][j] * j) % mo;
    for (int j = 0; j < i - 2; j++) F[n - i] = (long long)F[n - i] * n % mo;
  }
  for (int i = 0; i < n; i++) {
    for (int j = i + 1, sig = -1; j < n; j++, sig = -sig)
      F[i] = (F[i] + (long long)sig * F[j] * C[j][i]) % mo;
    if (F[i] < 0) F[i] += mo;
    printf("%d ", F[i]);
  }
  return 0;
}
