#include <bits/stdc++.h>
using namespace std;
const int MAXN = 105;
const int mod = 1e9 + 7;
vector<int> e[MAXN];
int n, sz[MAXN], f[MAXN][MAXN][2], tmp[MAXN][2], c[MAXN][MAXN];
inline int add(int x, int y) { return x + y >= mod ? x + y - mod : x + y; }
inline void inc(int &x, int y) { x = x + y >= mod ? x + y - mod : x + y; }
void dfs(int u, int ff) {
  sz[u] = 1;
  f[u][0][1] = f[u][0][0] = 1;
  for (int v, i = (int)e[u].size() - 1; ~i; --i)
    if ((v = e[u][i]) != ff) {
      dfs(v, u);
      for (int j = 0; j < sz[u] + sz[v]; ++j) tmp[j][0] = tmp[j][1] = 0;
      for (int j = 0; j < sz[u]; ++j)
        for (int k = 0; k < sz[v]; ++k) {
          inc(tmp[j + k + 1][0], 1ll * f[u][j][0] * f[v][k][0] % mod);
          inc(tmp[j + k + 1][1],
              (1ll * f[u][j][0] * f[v][k][1] + 1ll * f[u][j][1] * f[v][k][0]) %
                  mod);
          inc(tmp[j + k][0], 1ll * f[u][j][0] * f[v][k][1] % mod);
          inc(tmp[j + k][1], 1ll * f[u][j][1] * f[v][k][1] % mod);
        }
      sz[u] += sz[v];
      for (int j = 0; j < sz[u]; ++j)
        f[u][j][0] = tmp[j][0], f[u][j][1] = tmp[j][1];
    }
}
inline int qpow(int a, int b) {
  int re = 1;
  b < 0 ? b += mod - 1 : 0;
  for (; b; b >>= 1, a = 1ll * a * a % mod)
    if (b & 1) re = 1ll * re * a % mod;
  return re;
}
int main() {
  scanf("%d", &n);
  for (int i = 1, u, v; i < n; ++i)
    scanf("%d%d", &u, &v), e[u].push_back(v), e[v].push_back(u);
  dfs(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] = add(c[i - 1][j - 1], c[i - 1][j]);
  }
  for (int i = 0; i < n; ++i)
    f[1][i][1] = 1ll * f[1][i][1] * qpow(n, n - i - 2) % mod;
  for (int i = 0; i < n; ++i) {
    int ans = 0, cf = 1;
    for (int j = i; j < n; ++j)
      inc(ans, 1ll * f[1][j][1] * cf % mod * c[j][i] % mod), cf = mod - cf;
    printf("%d ", ans);
  }
}
