#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
const ll MOD = 1e9 + 7;
const double PI = 3.141592653589793238;
const double EPS = 1e-10;
vector<int> G[100000];
ll dp[100000], dp2[100000];
ll M;
ll dfs(int v, int par) {
	ll t = 1;
	for (int to : G[v]) {
		if (to == par) continue;
		(t *= (1 + dfs(to, v))) %= M;
	}
	return dp[v] = t;
}
void dfs2(int v, int par, ll x) {
	int n = G[v].size();
	vector<ll> child;
	vector<ll> L, R;
	for (int to : G[v]) {
		child.push_back(to);
		if (to == par) {
			L.push_back(x + 1);
			R.push_back(x + 1);
		}
		else {
			L.push_back(dp[to] + 1);
			R.push_back(dp[to] + 1);
		}
	}
	for (int i = 1; i < n; i++) (L[i] *= L[i - 1]) %= M;
	for (int i = n - 1; i > 0; i--) (R[i - 1] *= R[i]) %= M;
	dp2[v] = L[n - 1] % M;
	for (int i = 0; i < n; i++) {
		if (child[i] == par) continue;
		ll t = 1;
		if (i > 0) (t *= L[i - 1]) %= M;
		if (i + 1 < n) (t *= R[i + 1]) %= M;
		dfs2(child[i], v, t);
	}

}
int main() {
	int N;
	cin >> N >> M;
	if (N == 1) {
		cout << 1 << endl;
		return 0;
	}
	for (int i = 0; i < N - 1; i++) {
		int x, y;
		cin >> x >> y;
		x--; y--;
		G[x].push_back(y);
		G[y].push_back(x);
	}
	dfs(0, -1);
	dfs2(0, -1, 0);
	for (int i = 0; i < N; i++) cout << dp2[i] << endl;
}