#include<bits/stdc++.h>
#define ll long long
#define re register
#define cs const
namespace IO{
inline char gc(){
static cs int Rlen=1<<22|1;static char buf[Rlen],*p1,*p2;
return (p1p2)&&(p2=(p1=buf)+fread(buf,1,Rlen,stdin),p1p2)?EOF:*p1++;
}template<typename T>T get_integer(){
char c;bool f=false;while(!isdigit(c=gc()))f=c=='-';T x=c^48;
while(isdigit(c=gc()))x=((x+(x<<2))<<1)+(c^48);return f?-x:x;
}inline int gi(){return get_integer<int>();}
char obuf[(int)(3e7+7)],*oh=obuf,ch[23];
template<typename T>void print(T a,char c){
if(a<0)a=-a,*oh++='-';int tl=0;
do ch[tl]=a%10; while(a/=10);
while(tl)*oh=ch[tl--]^48;*oh++=c;
}struct obuf_flusher{~obuf_flusher(){fwrite(obuf,1,oh-obuf,stdout);}}Flusher;
}using namespace IO;
using std::cerr;
using std::cout;
cs int mod=1e9+7;
inline int add(int a,int b){return a+b>=mod?a+b-mod:a+b;}
inline int dec(int a,int b){return a-b<0?a-b+mod:a-b;}
inline int mul(int a,int b){ll r=(ll)ab;return r>=mod?r%mod:r;}
inline void Inc(int &a,int b){a+=b-mod;a+=a>>31&mod;}
inline void Dec(int &a,int b){a-=b;a+=a>>31&mod;}
inline void Mul(int &a,int b){a=mul(a,b);}
inline int po(int a,int b){int r=1;for(;b;b>>=1,Mul(a,a))if(b&1)Mul(r,a);return r;}
inline void ex_gcd(int a,int b,int &x,int &y){
if(!b){x=1,y=0;return;}ex_gcd(b,a%b,y,x);y-=a/bx;
}inline int Inv(int a){static int x,y;ex_gcd(mod,a,y,x);return x+(x>>31&mod);}
cs int N=1e5+7;
struct atom{
int u,v,su,sv,sm;
atom(int _u,int _v,int _su,int _sv)
:u(_u),v(_v),su(_su),sv(_sv),sm(su+sv-2){}
};
int n,rt,sz[N];
std::vector<int> G[N];
int fac[N],ifc[N];
std::vector<atom> path;
void dfs(int u,int p){
for(int v:G[u])
if(v!=p)dfs(v,u),sz[u]+=sz[v];
++sz[u];
}
void get_path(int u,int p,int up,int siz){
if(G[u].size()!=2){
if(up)
path.push_back((atom){u,up,sz[u],siz});
for(int v:G[u])if(v!=p)
get_path(v,u,u,n-sz[v]);
}else {
for(int v:G[u])if(v!=p)
get_path(v,u,up,siz);
}
}
int pr[N],nx[N],fa[N];
void del(int u){
pr[nx[u]]=pr[u];
nx[pr[u]]=nx[u];
}
int f[N],g[N],ans[N];
int gf(int u){
while(u!=fa[u])
u=fa[u]=fa[fa[u]];
return u;
}
void merge(cs atom &t){
int u=gf(t.u),v=gf(t.v);
f[u]+=f[v]-2,g[u]+=g[v]-t.sm,fa[v]=u;
}
void Main(){
n=gi();
for(int re i=1;i<n;++i){
int u=gi(),v=gi();
G[u].push_back(v);
G[v].push_back(u);
}
for(int re i=fac[0]=1;i<=n;++i)
fac[i]=mul(fac[i-1],i);
ifc[n]=Inv(fac[n]);
for(int re i=n;i;--i)
ifc[i-1]=mul(ifc[i],i);
for(rt=1;G[rt].size()==2;++rt);
dfs(rt,0);get_path(rt,0,0,0);
for(int re i=0;i<=n+1;++i)
pr[i]=i-1,nx[i]=i+1;
for(int re i=1;i<=n;++i)
if(G[i].size()==2u)del(i);
else fa[i]=i;
for(auto &t:path){
++f[t.u],f[t.v];
g[t.u]+=t.su-1;
g[t.v]+=t.sv-1;
}
std::sort(path.begin(),path.end(),
[](cs atom &a,cs atom &b){return a.sm>b.sm;});
auto nw=path.begin();
for(int re k=n-1;k;--k){
while(nw!=path.end()&&nw->sm>k)
merge(*nw);
ans[k]=fac[k];
for(int re i=nx[0];i<=n;i=nx[i]){
if(gf(i)!=i)del(i);
else {
int t=k-k*f[i]+g[i];
Mul(ans[k],ifc[t]);
}
}
}for(int re i=1;i<n;++i)
print(ans[i],'\n');
print(fac[n],'\n');
}
inline void file(){
#ifdef zxyoi
freopen("circus.in","r",stdin);
#endif
}signed main(){file();Main();return 0;}