func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename _T>   inline void read(_T &f) {     f = 0;     _T fu = 1;     char c = getchar();     while (c <  0  || c >  9 ) {       if (c ==  - ) {         fu = -1;       }       c = getchar();     }     while (c >=  0  && c <=  9 ) {       f = (f << 3) + (f << 1) + (c & 15);       c = getchar();     }     f *= fu;   }   template <typename T>   void print(T x) {     if (x < 0) putchar( - ), x = -x;     if (x < 10)       putchar(x + 48);     else       print(x / 10), putchar(x % 10 + 48);   }   template <typename T>   void print(T x, char t) {     print(x);     putchar(t);   }   const int N = 105, md = 1e9 + 7;   inline int add(int x, int y) {     x += y;     if (x >= md) x -= md;     return x;   }   inline void addx(int &x, int y) {     x += y;     if (x >= md) x -= md;   }   inline int sub(int x, int y) {     x -= y;     if (x < 0) x += md;     return x;   }   inline void subx(int &x, int y) {     x -= y;     if (x < 0) x += md;   }   inline int mul(int x, int y) { return 1ll * x * y % md; }   inline int fpow(int x, int y) {     int ans = 1;     while (y) {       if (y & 1) ans = mul(ans, x);       y >>= 1;       x = mul(x, x);     }     return ans;   }   vector<int> adj[N];   int f[N][N][N], ans[N], siz[N], c[N][N], tmp[N][N];   int n;   void conv(int a[N][N], int b[N][N], int &lena, int lenb) {     for (int i = 0; i <= lena + lenb; i++) {       for (int j = 0; j <= lena + lenb; j++) tmp[i][j] = 0;     }     for (int i = 0; i <= lena; i++) {       for (int j = 0; j <= lena; j++) {         if (a[i][j] == 0) continue;         for (int x = 0; x <= lenb; x++) {           for (int y = 0; y <= lenb; y++) {             if (b[x][y] == 0) continue;             addx(tmp[i + x + 1][j], mul(mul(a[i][j], b[x][y]), y));             addx(tmp[i + x][j + y], mul(a[i][j], b[x][y]));           }         }       }     }     lena += lenb;     for (int i = 0; i <= lena; i++) {       for (int j = 0; j <= lena; j++) a[i][j] = tmp[i][j];     }   }   void dfs1(int u, int fa) {     siz[u] = 1;     f[u][0][1] = 1;     for (auto v : adj[u]) {       if (v == fa) continue;       dfs1(v, u);       conv(f[u], f[v], siz[u], siz[v]);     }   }   int main() {     read(n);     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 = 1; i < n; i++) {       int u, v;       read(u);       read(v);       adj[u].push_back(v);       adj[v].push_back(u);     }     dfs1(1, 0);     for (int i = 0; i <= n; i++) {       for (int j = 0; j <= n; j++) {         if (f[1][i][j] == 0) continue;         addx(ans[n - i - 1], mul(f[1][i][j], j));       }     }     for (int i = n - 1; i >= 0; i--) {       if (i != n - 1)         ans[i] = mul(ans[i], fpow(n, n - i - 2));       else         ans[i] = 1;       for (int j = i + 1; j <= n - 1; j++) subx(ans[i], mul(ans[j], c[j][i]));     }     for (int i = 0; i <= n - 1; i++) print(ans[i],    );     putchar(  n );     return 0;   }   