/*
* じょえチャンネル
* 高評価・チャンネル登録よろしくおねがいします！
* https://www.youtube.com/channel/UCRXsI3FL_kvaVL9zoolBfbQ
*/

#include <bits/stdc++.h>

#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC optimize("unroll-loops")

#define f(i,n) for(int i=0;i<(n);i++)


#define inf (int)(3e18)

//here!!!
// define int long long !!!!!

#define int long long

// define int long long !!!!!


#define mod (int)((1e9)+7)

#define intt long long
#define itn long long
#define P pair<int,int>

#define rep(i,n) for(int i=0;i<n;i++)
#define REP(i,n) for(int i=1;i<=n;i++)

#define ALL(v) v.begin(),v.end()

using namespace std;

//Library
//モッドパウ
inline int modpow(int x, int y, int m = mod) {
    int res = 1;
    while (y) {
        if (y % 2) {
            res *= x;
            res %= m;
        }
        x = x * x % m;
        y /= 2;
    }
    return res;
}

int mypow(int x, int y) {
    int res = 1;
    while (y) {
        if (y % 2) {
            res *= x;
        }
        x = x * x;
        y /= 2;
    }
    return res;
}
//is the number (x) a prime number?
bool prime(int x) {
    for (int i = 2; i * i <= x; i++) {
        if (!(x % i)) {
            return false;
        }
    }
    return true;
}


//saidai-kouyakusuu
inline int gcd(int x, int y) {
    if (!y) {
        return x;
    }
    return gcd(y, x % y);
}


//number of keta
int keta(int x) {
    int ans = 0;
    while (x) {
        x /= 10;
        ans++;
    }
    return ans;
}

//sum of keta
int ketasum(int x) {
    int ans = 0;
    while (x) {
        ans += x % 10;
        x /= 10;
    }
    return ans;
}

inline int lcm(int x, int y) {
    int ans = x / gcd(x, y) * y;
    return ans;
}
int twobeki(int x) {
    int ans = 0;
    while (1) {
        if (!(x & 1)) {
            ans++;
            x /= 2;
        }
        else {
            break;
        }
    }
    return ans;
}


template <class T, class U>
inline bool chmax(T& lhs, const U& rhs) {
    if (lhs < rhs) {
        lhs = rhs;
        return 1;
    }
    return 0;
}
template <class T, class U>
inline bool chmin(T& lhs, const U& rhs) {
    if (lhs > rhs) {
        lhs = rhs;
        return 1;
    }
    return 0;
}
void Yes(){
    cout<<"Yes"<<endl;
}
void No(){
    cout<<"No"<<endl;
}
void YES(){
    cout<<"YES"<<endl;
}
void NO(){
    cout<<"NO"<<endl;
}


#define fin(i) scanf("%lld",&i)
#define fout(i) printf("%lld",i)
#define fendl printf("\n")
//Library-End

class modInt {
    int value, modulo;
public:
    modInt() : value(0), modulo(mod) { value = 0; }
    template<typename T>
    modInt(T value = 0, int modulo = mod) : value(value), modulo(modulo) {
        if (value < 0) {
            value = -value;
            value %= modulo;
            value = -value;
            value += modulo;
        }
        this->value = value % modulo;
    }
    inline operator int()const { return value; }
    inline modInt& operator+=(modInt x) {
        value += x.value;
        if (value >= modulo)value -= modulo;
        return *this;
    }
    inline modInt& operator++() {
        if (value == modulo - 1)value = 0;
        else value++;
        return *this;
    }
    inline modInt& operator-()const {
        return modInt(0) -= *this;
    }
    inline modInt& operator-=(modInt x) {
        value -= x.value;
        if (value < 0)value += modulo;
        return *this;
    }
    inline modInt& operator--() {
        if (value == 0)value = modulo - 1;
        else value--;
        return *this;
    }
    inline modInt& operator*=(modInt x) {
        value = value * x.value % modulo;
        return *this;
    }
    inline modInt& operator/=(modInt x) {
        return operator*=(x.inv());
    }
    inline modInt inv() {
        return modpow(*this, modulo - 2);
    }
    template<typename T> modInt operator+(T x) { return modInt(*this) += x; }
    template<typename T> modInt& operator+=(T x) { return operator+=(modInt(x, modulo)); }
    template<typename T> modInt operator-(T x) { return modInt(*this) -= x; }
    template<typename T> modInt& operator-=(T x) { return operator-=(modInt(x, modulo)); }
    template<typename T> modInt operator*(T x) { return modInt(*this) *= x; }
    template<typename T> modInt& operator*=(T x) { return operator*=(modInt(x, modulo)); }
    template<typename T> modInt operator/(T x) { return modInt(*this) /= x; }
    template<typename T> modInt& operator/=(T x) { return operator/=(modInt(x, modulo)); }
};
istream& operator>>(istream& ist, modInt& x) {
    int a;
    ist >> a;
    x = a;
    return ist;
}
#define vecin(v) for(int i=0;i<v.size();i++)scanf("%lld",&v[i]);
#define vecout(v) {printf("%lld",v[0]);for(int i=1;i<v.size();i++)printf(" %lld",v[i]);printf("\n");}

int perm[1000005];
void init_perm() {
    perm[0] = 1;
    REP(i, 1000000) {
        perm[i] = perm[i - 1] * i % mod;
    }
}

int nCk(int x, int y) {
    return perm[x] * modpow(perm[x - y], mod - 2) % mod * modpow(perm[y], mod - 2) % mod;
}



int n,a[200004],b[200004],dp[200004],dp2[200004],dp3[200004];
vector<int> road[200004];

inline int moddiv(int x, int y){
    return x * modpow(y, mod-2) % mod;
}

void dfs1(int x,int par){
    dp[x]=1;
    for(int i:road[x]){
        if (i==par) {
            continue;
        }
        dfs1(i,x);
        dp[x]+=dp[i];
    }
}
void dfs2(int x,int par){
    int waru=1;
    int kake=1;
    for(int i:road[x]){
        if (i==par) {
            continue;
        }
        dfs2(i,x);
        dp2[x]+=dp[i];
        waru*=perm[dp[i]];
        waru%=mod;
        kake*=dp2[i];
        kake%=mod;
    }
    dp2[x]=perm[dp2[x]];
    dp2[x]*=kake;
    dp2[x]%=mod;
    dp2[x]*=modpow(waru, mod-2);
    dp2[x]%=mod;
}

void dfs3(int x,P dpar, int par){
    int cnt=0;
    int kake=1;
    int waru=1;
    
    rep(i,road[x].size()){
        if (road[x][i]==par) {
            cnt+=dpar.first;
            waru*=perm[dpar.first];
            waru%=mod;
            kake*=dpar.second;
            kake%=mod;
            continue;
        }
        cnt+=dp[road[x][i]];
        waru*=perm[dp[road[x][i]]];
        waru%=mod;
        kake*=dp2[road[x][i]];
        kake%=mod;
    }
    
    for(int i:road[x]){
        if (i==par) {
            continue;
        }
        int ncnt=cnt-dp[i];
        ncnt=perm[ncnt];
        int nkake=moddiv(kake, dp2[i]);
        int nwaru=moddiv(waru, perm[dp[i]]);
        dfs3(i, {cnt - dp[i] + 1, moddiv(ncnt * nkake % mod, nwaru) }, x);
    }
    
    dp3[x]=moddiv(perm[cnt] * kake % mod,waru);
}

signed main(){
    ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    cin>>n;
    init_perm();
    rep(i,n-1){
        cin>>a[i]>>b[i];
        road[a[i]].push_back(b[i]);
        road[b[i]].push_back(a[i]);
    }
    dfs1(1, 0);
    dfs2(1, 0);
    dfs3(1, {0,1}, 0);
    REP(i,n){
        cout<<dp3[i]<<endl;
    }
}






Measured memory_bytes: 30320