#define _CRT_SECURE_NO_WARNINGS
#ifdef __GNUC__
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#define unordered_map __fast_unordered_map
template<class Key, class Value, class Hash = std::hash<Key>>
using unordered_map = __gnu_pbds::gp_hash_table<Key, Value, Hash>;
#else
#include <iostream>
#include <fstream>
#include <vector>
#include <deque>
#include <set>
#include <map>
#include <unordered_map>
#include <list>
#include <array>
#include <cstdlib>
#include <stack>
#include <string>
#include <queue>
#include <chrono>
#include <functional>
#include <limits>
#include <cmath>
#include <algorithm>
#include <random>
#include <regex>
#include <tuple>
#include <numeric>
#include <cassert>
#include <utility>
#include <bitset>
#include <complex>
#include <iomanip>
#include <ostream>
#include <sstream>
#include <ctime>
unsigned int __builtin_popcount(unsigned int x)
{
	int ret = 0;
	while(x)
	{
		ret += x & 1;
		x >>= 1;
	}
	return ret;
}
unsigned long long __builtin_popcountll(unsigned long long x)
{
	int ret = 0;
	while(x)
	{
		ret += x & 1LL;
		x >>= 1LL;
	}
	return ret;
}
long long __gcd(long long a, long long b)
{
	assert(a >= 0);
	assert(b >= 0);
	if (b == 0) return a;
	long long ret = __gcd(b, a % b);
	assert(ret);
	return ret;
}
int __gcd(int a, int b)
{
	assert(a >= 0);
	assert(b >= 0);
	if (b == 0) return a;
	int ret = __gcd(b, a % b);
	assert(ret);
	return ret;
}
bool __builtin_sadd_overflow(int a, int b, int *res) { return false; }
bool __builtin_saddll_overflow(long long int a, long long int b, long long int *res) { return false; }
bool __builtin_ssub_overflow(int a, int b, int *res) { return false; }
bool __builtin_ssubll_overflow(long long int a, long long int b, long long int *res) { return false; }
bool __builtin_smul_overflow(int a, int b, int *res) { return false; }
bool __builtin_smulll_overflow(long long int a, long long int b, long long int *res) { return false; }
#endif
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef unsigned short ushort;
const ll INFLL = 2 * (ll)1e18 + 100;
#define for0(i, n) for(int i = 0; i < n; ++i)
#define for1(i, n) for(int i = 1; i <= n; ++i)
#define pb push_back
#define mp make_pair
#define all(v) v.begin(), v.end()
#define V vector<int>
#define VP vector<pair<int, int> >
#define FASTIO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define index INDEX
template<class T> ostream &operator<<(ostream& os, const vector<T>& v) {
	if (v.empty()) return os;
	for (std::size_t i = 0; i < v.size() - 1; ++i) os << v[i] << ' ';
	return os << v.back();
}
template<class T> ostream &operator<<(ostream& os, const deque<T>& v) {
	if (v.empty()) return os;
	for (std::size_t i = 0; i < v.size() - 1; ++i) os << v[i] << ' ';
	return os << v.back();
}
template<class T> ostream &operator<<(ostream& os, const set<T>& v) {
	if (v.empty()) return os;
	auto aux = v.end(); --aux;
	for(auto it = v.begin(); it != aux; ++it)
	{
os << *it << ' ';
	}
	return os << *aux;
}
template<class T> ostream &operator<<(ostream& os, const multiset<T>& v) {
	if (v.empty()) return os;
	auto aux = v.end(); --aux;
	for (auto it = v.begin(); it != aux; ++it)
	{
		os << *it << ' ';
	}
	return os << *aux;
}
template<class L, class R> ostream &operator<<(ostream &os, const pair<L, R>& P) {
	return os << P.first << " " << P.second;
}
template<class TH> void _dbg(const char *sdbg, TH h) { cerr << sdbg << " = " << h << '\n'; }
template<class TH, class... TA> void _dbg(const char *sdbg, TH h, TA... a) {
	while (*sdbg != ',') cerr << *sdbg++;
	cerr << " = " << h << ','; _dbg(sdbg + 1, a...);
}
#ifdef AJECC
#define debug(...) _dbg(#__VA_ARGS__, __VA_ARGS__)
#else
#define debug(...) (__VA_ARGS__)
#define cerr if(0)cout
#endif
auto rng = mt19937_64(chrono::steady_clock::now().time_since_epoch().count());
int generate_random() {
	const int MAX_RANDOM = (int)20;
	return uniform_int_distribution<unsigned int>(1, MAX_RANDOM)(rng);
}
#define int ll /// might modify this sometimes
#ifdef int
const int INFINT = INFLL;
#else
const int INFINT = 2 * (int)1e9 + 100;
#endif
const double PI = atan(1) * 4;
const double EPS = 1e-6;
const int SEED = (int)1e3 + 7;
const int MOD = (int)1e9 + 7;
const int NMAX = (int)1e6 + 5;

int fact[NMAX];
int fact_inv[NMAX];
struct node
{
	int children_product = 1;
	int size = 1;

	int dp()
	{
		return children_product * fact[size - 1] % MOD;
	}
};

node info[NMAX];
vector<int> tree[NMAX];
int sol[NMAX];

int find_inv(int n, int p = MOD - 2)
{
	if (p == 0) return 1;
	if (p % 2 == 0) return find_inv(n * n % MOD, p / 2) % MOD;
	return n * find_inv(n, p - 1) % MOD;
}

void solve_dp(int node, int p)
{
	for (auto& i : tree[node])
	{
		if (i == p) continue;
		solve_dp(i, node);
		info[node].children_product *= info[i].dp() * fact_inv[info[i].size] % MOD;
		info[node].children_product %= MOD;
		info[node].size += info[i].size;
	}
}

bool rerooted[NMAX];
void reroot(int root)
{
	rerooted[root] = 1;
	sol[root] = info[root].dp();
	for (auto& i : tree[root])
	{
		if (rerooted[i]) continue;
		auto info_root_aux = info[root];
		auto info_i_aux = info[i];
		info[root].size -= info[i].size;
		info[root].children_product = info[root].children_product * find_inv(info[i].dp() * fact_inv[info[i].size] % MOD) % MOD;
		info[i].size += info[root].size;
		info[i].children_product = (info[i].children_product * info[root].dp() % MOD) * fact_inv[info[root].size] % MOD;
		reroot(i);
		info[i] = info_i_aux;
		info[root] = info_root_aux;
	}
}

int32_t main() {
	FASTIO;  /// disable for interactive
#ifdef AJECC
	double START_PROGRAM = clock();
#endif

	fact[0] = 1;
	fact_inv[0] = 1;
	for1(i, NMAX - 1)
	{
		fact[i] = fact[i - 1] * i % MOD;
		fact_inv[i] = find_inv(fact[i]);
	}


	int n;
	cin >> n;
	for1(i, n - 1)
	{
		int a, b;
		cin >> a >> b;
		tree[a].pb(b);
		tree[b].pb(a);
	}

	solve_dp(1, -1);
	reroot(1);
	for1(i, n) cout << sol[i] << '\n';

#ifdef AJECC
	double END_PROGRAM = clock();
	double ELAPSED_TIME = (END_PROGRAM - START_PROGRAM) / CLOCKS_PER_SEC;
	cerr << "\n\nElapsed Time: " << ELAPSED_TIME * 1000 << "\n";
#endif
	return 0;
}


Measured memory_bytes: 56432