#include <bits/stdc++.h>
const int MAXN = 100, MOD = 1e9 + 7;
int n, ecnt, head[MAXN + 5], comb[MAXN + 5][MAXN + 5];
int siz[MAXN + 5], f[MAXN + 5][MAXN + 5][2], g[MAXN + 5];
struct Edge {
  int to, nxt;
} graph[MAXN * 2 + 5];
inline int mul(const long long a, const int b) { return a * b % MOD; }
inline int sub(int a, const int b) { return (a -= b) < 0 ? a + MOD : a; }
inline void subeq(int& a, const int b) { (a -= b) < 0 && (a += MOD); }
inline int add(int a, const int b) { return (a += b) < MOD ? a : a - MOD; }
inline void addeq(int& a, const int b) { (a += b) >= MOD && (a -= MOD); }
inline int mpow(int a, int b) {
  int ret = 1;
  for (; b; a = mul(a, a), b >>= 1) ret = mul(ret, b & 1 ? a : 1);
  return ret;
}
inline void link(const int u, const int v) {
  graph[++ecnt] = {v, head[u]}, head[u] = ecnt;
  graph[++ecnt] = {u, head[v]}, head[v] = ecnt;
}
inline void initC() {
  comb[0][0] = 1;
  for (int i = 1, repEndi = n; i <= repEndi; ++i) {
    comb[i][0] = 1;
    for (int j = 1, repEndj = i; j <= repEndj; ++j)
      comb[i][j] = add(comb[i - 1][j - 1], comb[i - 1][j]);
  }
}
inline void getDP(const int u, const int fa) {
  f[u][1][0] = f[u][1][1] = siz[u] = 1;
  int tmp[MAXN + 5][2] = {}, (*fcur)[2] = f[u];
  for (int e = head[u], v; e; e = graph[e].nxt) {
    if ((v = graph[e].to) != fa) {
      getDP(v, u);
      int(*fsub)[2] = f[v];
      for (int i = 1, repEndi = siz[u]; i <= repEndi; ++i)
        for (int j = 1, repEndj = siz[v]; j <= repEndj; ++j) {
          addeq(tmp[i + j][0], mul(fcur[i][0], fsub[j][1]));
          addeq(tmp[i + j][1], mul(fcur[i][1], fsub[j][1]));
          addeq(tmp[i + j - 1][0], mul(fcur[i][0], fsub[j][0]));
          addeq(tmp[i + j - 1][1],
                add(mul(fcur[i][0], fsub[j][1]), mul(fcur[i][1], fsub[j][0])));
        }
      siz[u] += siz[v];
      for (int i = 1, repEndi = siz[u]; i <= repEndi; ++i) {
        fcur[i][0] = tmp[i][0], tmp[i][0] = 0;
        fcur[i][1] = tmp[i][1], tmp[i][1] = 0;
      }
    }
  }
}
int main() {
  scanf("%d", &n), initC();
  for (int i = 1, u, v; i < n; ++i) {
    scanf("%d %d", &u, &v);
    link(u, v);
  }
  getDP(1, 0);
  for (int i = 1, repEndi = n; i <= repEndi; ++i) {
    g[n - i] = mul(f[1][i][1], i < 2 ? 1 : mpow(n, i - 2));
  }
  g[n - 1] = 1;
  for (int i = 0, repEndi = n - 1; i <= repEndi; ++i) {
    int ans = 0;
    for (int j = i, repEndj = n - 1; j <= repEndj; ++j) {
      ((j - i) & 1 ? subeq : addeq)(ans, mul(comb[j][i], g[j]));
    }
    printf("%d%c", ans, i < n - 1 ? ' ' : '\n');
  }
  return 0;
}
