#include<bits/stdc++.h>
using namespace std;

const int N=200005;
const long long MOD=1e9+7;
int n,now[N];
int v[N],nxt[N],head[N];
long long m,dp[N],l[N],r[N],ans[N];

void dfs(int x,int fa)
{
	dp[x]=1;
	for(int i=head[x];i>0;i=nxt[i])
	{
		if(v[i]==fa) continue;
		dfs(v[i],x),dp[x]=dp[x]*(dp[v[i]]+1)%m;
	}
	int cnt=0;
	for(int i=head[x];i>0;i=nxt[i])
	{
		if(v[i]!=fa) now[++cnt]=v[i];
	}
	if(!cnt) return;
	l[now[1]]=r[now[cnt]]=1;
	for(int i=2;i<=cnt;i++) l[now[i]]=l[now[i-1]]*(dp[now[i-1]]+1)%m;
	for(int i=cnt-1;i>=1;i--) r[now[i]]=r[now[i+1]]*(dp[now[i+1]]+1)%m;
}

void dfs2(int x,int fa,long long val)
{
	ans[x]=dp[x]*(val+1)%m;
	for(int i=head[x];i>0;i=nxt[i])
	{
		if(v[i]==fa) continue;
		dfs2(v[i],x,(val+1)*l[v[i]]%m*r[v[i]]%m);
	}
}

int main()
{
	scanf("%d%lld",&n,&m);
	for(int i=1;i<n;i++)
	{
		scanf("%d%d",&v[i],&v[i+n]);
		nxt[i]=head[v[i+n]],head[v[i+n]]=i;
		nxt[i+n]=head[v[i]],head[v[i]]=i+n;
	}
	dfs(1,0);
	dfs2(1,0,0);
	for(int i=1;i<=n;i++) printf("%lld\n",ans[i]);
}