func_code_string: #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);     }   }   