#include <bits/stdc++.h>
using namespace std;
int sz[110], n;
long long f[110][110][110], g[110], fac[110], ifac[110], inv[110 * 110];
long long tmp[110][110];
const long long p = 1e9 + 7;
vector<int> nxt[110];
long long pw(long long a, long long b) {
  long long ret = 1;
  while (b) {
    if (b & 1) ret = ret * a % p;
    a = a * a % p;
    b >>= 1;
  }
  return ret;
}
long long c(long long a, long long b) {
  return fac[a] * ifac[b] % p * ifac[a - b] % p;
}
void dfs(int x, int fa) {
  f[x][1][1] = sz[x] = 1;
  for (int v : nxt[x]) {
    if (v == fa) continue;
    dfs(v, x);
    memset(tmp, 0, sizeof(tmp));
    for (int i = sz[x]; i; i--) {
      for (int j = sz[x]; j; j--) {
        for (int k = sz[v]; k; k--) {
          for (int l = sz[v]; l; l--) {
            tmp[i + k - 1][j + l] =
                (tmp[i + k - 1][j + l] + f[x][i][j] * f[v][k][l] % p) % p;
            tmp[i + k][j] =
                (tmp[i + k][j] + f[x][i][j] * f[v][k][l] % p * l % p) % p;
          }
        }
      }
    }
    sz[x] += sz[v];
    memcpy(f[x], tmp, sizeof(tmp));
  }
}
void init() {
  fac[0] = inv[1] = 1;
  for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i % p;
  ifac[n] = pw(fac[n], p - 2);
  for (int i = n - 1; ~i; i--) ifac[i] = ifac[i + 1] * (i + 1) % p;
  for (int i = 1; i < 110 * 110; i++) inv[i] = (p - p / i) * inv[p % i] % p;
}
int main() {
  scanf("%d", &n), init();
  for (int i = 1, x, y; i <= n - 1; i++)
    scanf("%d%d", &x, &y), nxt[x].push_back(y), nxt[y].push_back(x);
  dfs(1, 0), g[n - 1] = 1;
  for (int i = 0; i <= n - 2; i++) {
    for (int j = 1; j <= n; j++)
      g[i] = (g[i] + pw(n, n - i - 2) * f[1][n - i][j] % p * j % p) % p;
  }
  for (int i = 0; i <= n - 1; i++) {
    long long ans = 0;
    for (int j = i; j <= n - 1; j++)
      ans = (ans + g[j] * c(j, i) % p * ((j - i) & 1 ? p - 1 : 1) % p) % p;
    printf("%lld%c", ans, i == n - 1 ? '\n' : ' ');
  }
  return 0;
}
