#include <bits/stdc++.h>
using namespace std;
const int N = 100;
const int P = 1e9 + 7;
struct Edge {
  int u, v;
} e[(N << 1) + 2];
long long det[N + 3];
long long poly[N + 3], poly0[N + 3], poly1[N + 3];
int n;
long long quickpow(long long x, long long y) {
  long long cur = x, ret = 1ll;
  for (int i = 0; y; i++) {
    if (y & (1ll << i)) {
      ret = ret * cur % P;
      y -= (1ll << i);
    }
    cur = cur * cur % P;
  }
  return ret;
}
long long mulinv(long long x) { return quickpow(x, P - 2); }
struct Matrix {
  long long a[N + 3][N + 3];
  int sz;
  void setsz(int x) { sz = x; }
  long long gauss() {
    for (int i = 1; i <= sz; i++) {
      for (int j = 1; j <= sz; j++) {
        if (a[i][j] < 0) a[i][j] += P;
      }
    }
    long long coe = 1;
    for (int i = 1; i <= sz; i++) {
      if (a[i][i] == 0) {
        bool found = false;
        for (int j = i + 1; j <= sz; j++) {
          if (a[j][i] != 0) {
            for (int k = i; k <= sz; k++) {
              swap(a[i][k], a[j][k]);
            }
            coe = -coe;
            found = true;
            break;
          }
        }
        if (found == false) continue;
      }
      for (int j = i + 1; j <= sz; j++) {
        long long tcoe = P - (a[j][i] * mulinv(a[i][i]) % P);
        for (int k = i; k <= sz; k++) {
          a[j][k] += a[i][k] * tcoe;
          a[j][k] %= P;
        }
      }
    }
    return coe;
  }
  long long determinant() {
    long long ret = gauss() + P;
    {
      if (ret >= P) ret -= P;
    };
    for (int i = 1; i <= sz; i++) ret = ret * a[i][i] % P;
    return ret;
  }
} mt, mt2, mt3, test;
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    for (int j = 1; j < n; j++) {
      mt.a[i][j] = i == j ? n - 1 : -1;
    }
  }
  mt.setsz(n - 1);
  for (int i = 1; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    mt2.a[x][y] = mt2.a[y][x] = 1;
  }
  for (int i = 1; i <= n; i++) {
    mt3 = mt;
    for (int j = 1; j <= n; j++) {
      for (int k = j + 1; k <= n; k++) {
        if (mt2.a[j][k]) {
          mt3.a[j][k] = P - i;
          mt3.a[k][j] = P - i;
          mt3.a[j][j] += i - 1;
          {
            if (mt3.a[j][j] >= P) mt3.a[j][j] -= P;
          };
          mt3.a[k][k] += i - 1;
          {
            if (mt3.a[k][k] >= P) mt3.a[k][k] -= P;
          };
        }
      }
    }
    det[i] = mt3.determinant();
  }
  poly0[1] = 1;
  poly0[0] = P - 1;
  for (int i = 2; i <= n; i++) {
    poly0[i] = poly0[i - 1];
    for (int j = i - 1; j >= 1; j--) {
      poly0[j] = (poly0[j - 1] - i * poly0[j] % P + P) % P;
    }
    poly0[0] = poly0[0] * (P - i) % P;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= n; j++) poly1[j] = poly0[j];
    for (int j = n - 1; j >= 0; j--) {
      poly1[j] = (poly1[j] + poly1[j + 1] * i) % P;
    }
    for (int j = 0; j < n; j++) poly1[j] = poly1[j + 1];
    poly1[n] = 0ll;
    long long tmp = 1ll;
    for (int j = 1; j <= n; j++) {
      if (j != i) tmp = tmp * (i - j + P) % P;
    }
    for (int j = 0; j < n; j++)
      poly1[j] = poly1[j] * det[i] % P * mulinv(tmp) % P;
    for (int j = 0; j < n; j++) {
      poly[j] += poly1[j];
      {
        if (poly[j] >= P) poly[j] -= P;
      };
    }
  }
  for (int i = 0; i < n; i++) printf("%I64d ", poly[i]);
  return 0;
}
