#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair
#define pll pair<ll,ll>
using namespace std;
const int maxn = 100100;
vector<int>g[maxn];
ll n, mod;
ll dp[maxn];

void dfs_zero(int node, int p) {
	dp[node] = 1LL;
	for(int i:g[node]) {
		if(i == p) continue;
		
		dfs_zero(i, node);
		dp[node] *= (dp[i] + 1)%mod;
		dp[node] %= mod;
	}

}

void dfs_one(int node, int p, ll carry0=1LL) {
	vector<ll>pref(g[node].size()+3);
	vector<ll>suff(g[node].size()+3);
	vector<ll>dps(g[node].size()+3);

	pref[0] = dps[0] = 1LL; // empty node
	int x = 1, br = 0;
	for(int i:g[node]) {
		if(i == p) continue;
		dps[x] = (dp[i] + 1)%mod;
		x++;
		br++;
	}

	dp[node] *= carry0%mod;
	dp[node] %= mod;

	for(int i=1;i<=br;i++) {
		pref[i] = (pref[i-1] * dps[i])%mod;
	}

	suff[br+1] = dps[br+1] = 1LL;
	for(int i=br;i>=0;i--) {
		suff[i] = (suff[i+1] * dps[i])%mod;
	}

	x = 1;
	for(int i:g[node]) {
		if(i == p) continue;

		ll tmp = 1LL * pref[x-1] % mod;
		tmp *= suff[x+1] % mod;
		tmp %= mod;
		tmp *= carry0; tmp %= mod;

		dfs_one(i, node, tmp+1);
		x++;
	}

}

int main() {
	cin>>n>>mod;
	ll a, b;
	for(int i=0;i<n-1;i++) {
		cin>>a>>b;
		g[a].pb(b);
		g[b].pb(a);
	}

	dfs_zero(1, -1);
	dfs_one(1, -1);

	for(int i=1;i<=n;i++) {
		cout<<dp[i]<<"\n";
	}
}