#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int f = 1, x = 0;
  char ch;
  do {
    ch = getchar();
    if (ch == '-') f = -1LL;
  } while (ch < '0' || ch > '9');
  do {
    x = x * 10 + ch - '0';
    ch = getchar();
  } while (ch >= '0' && ch <= '9');
  return f * x;
}
template <class T>
inline void chmax(T &a, T b) {
  if (a < b) a = b;
}
template <class T>
inline void chmin(T &a, T b) {
  if (a > b) a = b;
}
inline void swap(int &a, int &b) {
  int c = a;
  a = b;
  b = c;
}
using namespace std;
const int N = 233;
const int P = 1e9 + 7;
inline long long qpow(long long a, long long b) {
  long long q = 1;
  while (b) {
    if (b & 1) q = q * a % P;
    a = a * a % P;
    b >>= 1;
  }
  return q;
}
inline long long gtinv(long long x) { return qpow(x, P - 2); }
long long a[N][N];
int e[N][N];
inline long long sub(long long a, long long b) {
  if (a < b) return a - b + P;
  return a - b;
}
long long det(int n) {
  long long ans = 1;
  for (int i = (1); i <= (n); ++i) {
    bool fg = 0;
    for (int j = (i); j <= (n); ++j)
      if (a[j][i] != 0) {
        for (int k = (i); k <= (n); ++k) swap(a[i][k], a[j][k]);
        if (j != i) ans = -ans;
        fg = 1;
        break;
      }
    if (!fg) return 0;
    for (int j = (i + 1); j <= (n); ++j) {
      long long tmp = -a[j][i] * qpow(a[i][i], P - 2) % P;
      for (int k = (i); k <= (n); ++k) a[j][k] = (a[j][k] + tmp * a[i][k]) % P;
    }
  }
  for (int i = (1); i <= (n); ++i) ans = ans * a[i][i] % P;
  if (ans < 0) ans += P;
  return ans;
}
struct interpolation {
  int n, x[N], y[N], inv[N];
  int poly[N], tmp[N], ans[N];
  int nginv[N];
  inline void work(int _n, int *qaq) {
    n = _n;
    for (int i = (0); i <= (n - 1); ++i) y[i] = qaq[i];
    for (int i = (0); i <= (n - 1); ++i) x[i] = i + 1;
    poly[0] = -x[0];
    poly[1] = 1;
    for (int i = (1); i <= (n - 1); ++i) {
      for (int j = (i + 1); j >= (0); --j) {
        poly[j] = (1ll * poly[j] * (-x[i]) % P + poly[j - 1]) % P;
      }
    }
    inv[1] = 1;
    for (int i = (2); i <= (n); ++i)
      inv[i] = 1ll * (P - P / i) * inv[P % i] % P;
    for (int i = (1); i <= (n); ++i) nginv[i] = qpow(P - i, P - 2);
    for (int i = (0); i <= (n - 1); ++i) {
      int now = y[i];
      for (int j = (0); j <= (n); ++j) tmp[j] = 0;
      for (int j = (0); j <= (n); ++j)
        tmp[j] =
            1ll * (poly[j] - tmp[j - 1 >= 0 ? j - 1 : 0]) * nginv[x[i]] % P;
      for (int j = (0); j <= (n - 1); ++j)
        if (i != j)
          now = 1ll * now *
                (x[i] - x[j] >= 1 ? inv[x[i] - x[j]] : nginv[x[j] - x[i]]) % P;
      assert(tmp[n] == 0);
      for (int j = (0); j <= (n); ++j)
        ans[j] = (1ll * ans[j] + 1ll * tmp[j] * now % P) % P;
    }
    for (int i = (0); i <= (n - 1); ++i) printf("%d ", (ans[i] % P + P) % P);
    puts("");
  }
};
int n;
int ans[N];
int main() {
  n = read();
  for (int i = (1); i <= (n - 1); ++i) {
    int u = read(), v = read();
    e[u][v] = e[v][u] = 1;
  }
  for (int x = (1); x <= (n); ++x) {
    for (int i = (0); i <= (n); ++i) a[i][i] = 0;
    for (int i = (1); i <= (n); ++i) {
      for (int j = (1); j <= (n); ++j) {
        if (i == j) continue;
        a[i][j] = e[i][j] ? -x : -1;
        a[i][i] -= a[i][j];
      }
    }
    ans[x - 1] = (det(n - 1) % P + P) % P;
  }
  (new interpolation)->work(n, ans);
  return 0;
}
