#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
int N,M,x,y,visited[100010] = {},visited2[100010] = {};
ll dp[100010] = {},ans[100010] = {};
vector<vector<int>> v(100010); 

void dfs(int n){
	visited[n] = 1;
	dp[n] = 1;
	for(auto x:v[n]){
		if(visited[x]==0){
			dfs(x);
			(dp[n] *= 1+dp[x])%=M;
		}
	}
}

void dfs2(int n,int m,ll value){
	visited2[n] = 1;
	vector<ll> left,right;
	for(auto x:v[n]){
		if(x==m){
			left.push_back((1+value)%M);
			right.push_back((1+value)%M);	
		}else{
			left.push_back((1+dp[x])%M);
			right.push_back((1+dp[x])%M);
		}
	}
	int s = v[n].size();
	for(int i=1;i<s;i++) (left[i] *= left[i-1])%=M;
	for(int i=s-2;i>=0;i--) (right[i] *= right[i+1])%=M;
	ans[n] = right[0]%M;
	for(int i=0;i<s;i++){
		int x = v[n][i];
		if(visited2[x]==0){
			ll res = 1;
			if(i!=0) (res *= left[i-1])%=M;
			if(i!=s-1) (res *= right[i+1])%=M;
			dfs2(x,n,res);
		}
	}
}

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