#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> P;
struct edge{ll to,cost;};
const int inf = 1<<27;
const ll INF = 1LL<<60;
const int COMBMAX = 1001001;
const ll MOD = 1000000007;
#define rep(i,n) for(int i = 0; i < (n); ++i)
#define eachdo(v, e) for(const auto& e : (v))
#define all(v) (v).begin(), (v).end()
#define lower_index(v, e) (ll)distance((v).begin(), lower_bound((v).begin(), (v).end(), e))
#define upper_index(v, e) (ll)distance((v).begin(), upper_bound((v).begin(), (v).end(), e))
ll mpow(ll a, ll n, ll mod = MOD){ll res = 1; while(n > 0){if(n & 1)res = res * a % mod; a = a * a % mod; n >>= 1;} return res;}
void YesNo(bool j){cout << (j ? "Yes" : "No") << endl; return;}
void yesno(bool j){cout << (j ? "yes" : "no") << endl; return;}
template<class Head> void pt(Head&& head){cout << head << endl; return;}
template<class Head, class... Tail> void pt(Head&& head, Tail&&... tail){cout << head << " "; pt(forward<Tail>(tail)...);}
template<class T> void debug(T v){rep(i, v.size()) cout << v[i] << " " ; cout << endl;}
template<class T> void debug2(T v){rep(i, v.size()){rep(j, v[i].size()) cout << v[i][j] << " " ; cout << endl;}}
template<class T1, class T2> ll bcount(T1 v, T2 a){return upper_index(v, a) - lower_index(v, a);} 
template<class T1, class T2> inline bool chmin(T1 &a, T2 b){if(a > b){a = b; return true;} return false;}
template<class T1, class T2> inline bool chmax(T1 &a, T2 b){if(a < b){a = b; return true;} return false;}

struct mint {
ll x;
    mint(ll x=0):x((x%MOD+MOD)%MOD){}
    mint& operator+=(const mint a) {if ((x += a.x) >= MOD) x -= MOD;return *this;}
    mint& operator-=(const mint a) {if ((x += MOD-a.x) >= MOD) x -= MOD;return *this;}
    mint& operator*=(const mint a) {(x *= a.x) %= MOD;return *this;}
    mint operator+(const mint a) const {mint res(*this);return res+=a;}
    mint operator-(const mint a) const {mint res(*this);return res-=a;}
    mint operator*(const mint a) const {mint res(*this);return res*=a;}
    mint pow(ll t) const {if (!t) return 1;mint a = pow(t>>1);a *= a;if (t&1) a *= *this;return a;}
    mint inv() const {return pow(MOD-2);}
    mint& operator/=(const mint a) {return (*this) *= a.inv();}
    mint operator/(const mint a) const {mint res(*this);return res/=a;}
};

class combination {
    public:
    vector<mint> fact, ifact;
    combination(int n):fact(n+1),ifact(n+1) {
        assert(n < MOD);
        fact[0] = 1;
        for (int i = 1; i <= n; ++i) fact[i] = fact[i-1]*i;
        ifact[n] = fact[n].inv();
        for (int i = n; i >= 1; --i) ifact[i-1] = ifact[i]*i;
    }
    mint operator()(int n, int k) {
        if (k < 0 || k > n) return 0;
        if (COMBMAX < n){
            mint ret = 1;
            for(ll i = 1; i <= k; i++){
                ret *= (n-i+1);
                ret /= i;
            }
            return ret;
        }
        return fact[n]*ifact[k]*ifact[n-k];
    }

    mint multi(ll n,ll sum,ll l,ll r){
        ll m = r - l + 1;
        ll t = sum - n*(l-1);
        mint ans = 0;
        for(ll k = 0; k <= (t - n) / m; k++){
            ll sign = k%2==0 ? 1 : -1;
            mint temp = this->operator()(n, k);
            temp *= this->operator()(n+(t-n-m*k-1),t-n-m*k);
            temp *= sign;
            ans += temp;
        }
        return ans;
    }
} com(COMBMAX);

ll N;
vector<vector<ll>> g(200005, vector<ll>());
vector<pair<mint, ll>> DPpos(200005);
vector<pair<mint, ll>> DPngt(200005);
vector<bool> posVisited(200005, false);
vector<bool> negVisited(200005, false);

pair<mint, ll> dfs1(ll v, ll par = -1){
    if (posVisited[v]) return DPpos[v];
    mint ret = 1;
    ll siz = 0;
    eachdo(g[v], u){
        if (u == par) continue;
        ret *= com(siz + dfs1(u, v).second, siz); 
        ret *= dfs1(u, v).first;
        siz += dfs1(u, v).second;
    }
    siz += 1;
    DPpos[v] = make_pair(ret, siz);
    posVisited[v] = true;
    return DPpos[v];
}

void dfs2(ll v, ll par = -1){
    // pt(v, par);
    if (par == -1){
        DPngt[v] = DPpos[v];
    }else{
        mint part;
        ll partSize;
        tie(part, partSize) = DPngt[par];

        part /= com(N - 1, DPpos[v].second);
        part /= DPpos[v].first;

        partSize -= DPpos[v].second;

        mint ret;
        ll size;
        tie(ret, size) = DPpos[v];
        size--;
        ret *= com(N - 1, size);
        ret *= part;
        DPngt[v] =  make_pair(ret, N);
    }
    eachdo(g[v], u){
        if (par == u) continue;
        dfs2(u, v);
    }
    return;
}

int main(){
    cin >> N;
    rep(i, N - 1){
        ll u, v; cin >> u >> v;
        g[--u].emplace_back(--v);
        g[v].emplace_back(u);
    }
    dfs1(0);
    dfs2(0);
    // rep(i, N) pt(DPpos[i].first.x, DPpos[i].second);
    rep(i, N) pt(DPngt[i].first.x); 
    return 0;
}

Measured memory_bytes: 36592