#include<bits/stdc++.h>

using namespace std;

typedef long long LL;
const int MAXN=100000+10;
vector<int> G[MAXN];
LL dp[MAXN],suf[MAXN],pre[MAXN],pro[MAXN];
int n,MOD;

void dfs(int nod,int fa){
	dp[nod]=1;
	int len=G[nod].size();
	for(int i=0;i<len;i++){
		int son=G[nod][i];
		if(fa!=son){
			dfs(son,nod);
			dp[nod]=dp[nod]*(dp[son]+1)%MOD;
		}
	}
}

void sch(int nod,int fa){
	int len=G[nod].size(),m=0;
	
	pre[0]=1;
	for(int i=0;i<len;i++){
		int son=G[nod][i];
		if(son==fa) continue;
		m++;
		pre[m]=pre[m-1]*(dp[son]+1)%MOD;
	}
	
	suf[m+1]=1;
	for(int i=len-1;i>=0;i--){
		int son=G[nod][i];
		if(son==fa) continue;
		suf[m]=suf[m+1]*(dp[son]+1)%MOD;
		m--;
	}
	
	m=0;
	for(int i=0;i<len;i++){
		int son=G[nod][i];
		if(son==fa) continue;
		m++;
		pro[son]=(pro[nod]*1ll*pre[m-1]%MOD*suf[m+1]+1)%MOD;
	}
	
	for(int i=0;i<len;i++){
		int son=G[nod][i];
		if(son==fa) continue;
		sch(son,nod);
	}
}

int main(){
	cin>>n>>MOD;
	for(int i=1;i<n;i++){
		int x,y;
		cin>>x>>y;
		G[x].push_back(y);
		G[y].push_back(x);
	}
	
	dfs(1,-1);
	pro[1]=1;
	sch(1,-1);
	
	for(int i=1;i<=n;i++){
		cout<<dp[i]*pro[i]%MOD<<endl;
	}
	return 0;
}
 