func_code_string: #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;   const int mod = 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;   }   int n;   long long ans[N], inv[N], g[N], w[N];   long long c[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 = (0); 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] = det(n - 1);     }     inv[0] = inv[1] = 1;     for (int i = 2; i <= n; i++) inv[i] = mod - (inv[mod % i] * (mod / i)) % mod;     g[0] = g[1] = 1;     for (int i = 2; i <= n; i++) g[i] = g[i - 1] * inv[i] % mod;     for (int i = 0; i <= n; i++) w[i] = qpow(i, n);     for (int i = n; i >= 0; i--) {       for (int j = 0; j <= i; j++) {         if (j & 1) {           c[i] -= g[j] * g[i - j] % mod * ans[i - j] % mod;           if (c[i] < 0) c[i] += mod;         } else {           c[i] += g[j] * g[i - j] % mod * ans[i - j] % mod;           if (c[i] >= mod) c[i] -= mod;         }       }       for (int j = 1; j <= n; j++) {         ans[j] -= c[i] * w[j] % mod;         if (ans[j] < 0) ans[j] += mod;         w[j] = w[j] * inv[j] % mod;       }     }     for (int i = (0); i <= (n - 1); ++i) printf( %lld  , c[i]);     puts(  );     return 0;   }   