#include<bits/stdc++.h> 
using namespace std; 
#define ll long long int
#define v vector<ll>
#define vv vector<v>
ll MOD=1e9+7;
ll n,m;
ll LIM=1e5+10;
vv adj(LIM);
v down(LIM,1);
v ans(LIM,1);
vv children(LIM);
void dfs(ll n,ll par)
{
	for (ll i=0; i<adj[n].size(); i++)
	{
		if (adj[n][i]!=par)
		{
			children[n].push_back(adj[n][i]);
			dfs(adj[n][i],n);
			down[n]=(down[n]*(1+down[adj[n][i]]))%m;
		}
	}
}
void dfs2(ll n,ll par, ll up)
{
	ans[n]=(down[n]*(1+up))%m;
	ll k=(int)(children[n].size());
	if (k==0)
		return;
	v left(k,1),right(k,1);
	right[k-1]=(1+down[children[n][k-1]]);
	left[0]=(1+down[children[n][0]]);
	for (ll i=1; i<k; i++)
		left[i]=(left[i-1]*(1+down[children[n][i]]))%m;
	for (ll i=k-2; i>=0; i--)
		right[i]=(right[i+1]*(1+down[children[n][i]]))%m;
	for (ll i=0; i<children[n].size(); i++)
	{
			ll temp;
			if (i==0 && i==k-1)
				temp=1;
			else if (i==0)
				temp=right[i+1];
			else if (i==k-1)
				temp=left[i-1];
			else
				temp=(left[i-1]*right[i+1])%m;
			temp=(temp*(1+up))%m;
			dfs2(children[n][i],n,temp);
	}
}
int main() 
{ 
	cin>>n>>m;
	for (ll i=1; i<n; i++)
	{
		ll a,b;
		cin>>a>>b;
		adj[a].push_back(b);
		adj[b].push_back(a);
	}
	dfs(1,1);
	dfs2(1,1,0);
	for (int i=1; i<=n; i++)
		cout<<ans[i]<<endl;
    return 0;
} 