#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define sz(x) ((int)x.size())
#define all(x) (x).begin(), (x).end()
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define mset(x,y) memset(x,y,sizeof(x))
#define rep(i,n) for(int i=0;i<int(n);i++)
#define per(i,n) for(int i=int(n)-1;i>=0;i--)
#define rng(i,a,b) for(int i=int(a);i<=int(b);i++)
#define gnr(i,b,a) for(int i=int(b);i>=int(a);i--)
using namespace std;
using namespace __gnu_pbds;
using ordered_set = tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>;
#ifdef LOCAL
#define dmp(...) _dmp(#__VA_ARGS__, __VA_ARGS__)
#else
#define dmp(...) (__VA_ARGS__)
#endif
template<class T> using vt=vector<T>;
template<class T> using vvt=vt<vt<T>>;
template<class TA,class TB> void chmax(TA&a,TB b){if(a<b)a=b;}
template<class TA,class TB> void chmin(TA&a,TB b){if(b<a)a=b;}
template<class TA,class TB>
ostream& operator<<(ostream& os,const pair<TA,TB>& p){
	return os<<"{"<<p.fi<<","<<p.se<<"}";
}
template<class T> ostream& operator<<(ostream& os,const vt<T>& v){
	os<<"{";for(auto& e:v)os<<e<<",";return os<<"}";
}
template<class TH> void _dmp(const char *sdbg, TH h){cout<<sdbg<<"="<<h<<endl;}
template<class TH, class... TA> void _dmp(const char *sdbg, TH h, TA...a){
while(*sdbg!=',')cout<<*sdbg++;cout<<"="<<h<<","; _dmp(sdbg+1, a...);
}
template<class T> void make_unique(vt<T>& v) {
	sort(all(v));v.erase(unique(all(v)),v.end());
}
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
int ri(){int x;cin>>x;return x;}
ll rll(){ll x;cin>>x;return x;}
vi rvi(int n){vi v;rep(i,n)v.pb(ri());return v;}
template<int mod>
struct modint{
	int v;
	modint(ll vv=0){s(vv%mod+mod);}
	modint& s(int vv){
		v=vv<mod?vv:vv-mod;
		return *this;
	}
	modint operator-()const{return modint()-*this;}
	modint& operator+=(const modint&rhs){return s(v+rhs.v);}
	modint&operator-=(const modint&rhs){return s(v+mod-rhs.v);}
	modint&operator*=(const modint&rhs){
		v=ll(v)*rhs.v%mod;
		return *this;
	}
	modint&operator/=(const modint&rhs){return *this*=rhs.inv();}
	modint operator+(const modint&rhs)const{return modint(*this)+=rhs;}
	modint operator-(const modint&rhs)const{return modint(*this)-=rhs;}
	modint operator*(const modint&rhs)const{return modint(*this)*=rhs;}
	modint operator/(const modint&rhs)const{return modint(*this)/=rhs;}
	modint pow(int n)const{
		modint res(1),x(*this);
		while(n){
			if(n&1)res*=x;
			x*=x;
			n>>=1;
		}
		return res;
	}
	modint inv()const{return pow(mod-2);}
	/*modint inv()const{
		int x,y;
		int g=egcd(v,mod,x,y);
		assert(g==1);
		if(x<0)x+=mod;
		return modint(x);
	}*/
	friend modint operator+(int x,const modint&y){return modint(x)+y;}
	friend modint operator-(int x,const modint&y){return modint(x)-y;}
	friend modint operator*(int x,const modint&y){return modint(x)*y;}
	friend modint operator/(int x,const modint&y){return modint(x)/y;}
	friend ostream& operator<<(ostream&os,const modint&m){return os<<m.v;}
	friend istream& operator>>(istream&is,modint&m){
		ll x;is>>x;
		m=modint(x);
		return is;
	}
	bool operator<(const modint&r)const{return v<r.v;}
	bool operator==(const modint&r)const{return v==r.v;}
	bool operator!=(const modint&r)const{return v!=r.v;}
	explicit operator bool()const{return v;}
};
using mint=modint<1000000007>;
int n;
int sub[200010];
mint D[200010],E[200010];
mint fact[200010],finv[200010];
vi g[200010];
void dfs(int p,int u) {
	D[u]=1;
	sub[u]=1;
	for(auto& it:g[u]) {
		if(it==p)continue;
		dfs(u,it);
		D[u]*=finv[sub[it]]*D[it];
		sub[u]+=sub[it];
	}
	D[u]*=fact[sub[u]-1];
}
void dfs2(int p,int u) {
	mint prod=E[u]*finv[n-sub[u]];
	for(auto& it:g[u])if(it!=p)prod*=D[it]*finv[sub[it]];
	for(auto& it:g[u]) {
		if(it==p)continue;
		E[it]=prod*D[it].inv()*fact[sub[it]]*fact[n-sub[it]-1];
		dfs2(u,it);
	}
}
void MAIN() {
	cin>>n;
	for(int i=0;i<n-1;i++) {
		int u,v;cin>>u>>v;
		g[u].pb(v);
		g[v].pb(u);
	}
	fact[0]=finv[0]=1;
	for(int i=1;i<=n;i++)fact[i]=i*fact[i-1];
	finv[n]=fact[n].inv();
	for(int i=n-1;i>=1;i--)finv[i]=(i+1)*finv[i+1];
	E[1]=1;
	dfs(1,1);
	dfs2(1,1);
	for(int i=1;i<=n;i++) {
		cout<<fact[n-1]*finv[sub[i]-1]*finv[n-sub[i]]*D[i]*E[i]<<'\n';
	}
}
int main() {
	ios::sync_with_stdio(false);cin.tie(0);
	int T=1;
	//cin>>T;
	for(int tt=1;tt<=T;tt++) {
		MAIN();
	}
	return 0;
}

Measured memory_bytes: 17908