#include <stdio.h>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;

int mod = 1000000007;

vector<int> G[100100];
int N; long long D[100100], U[100100], A[100100];

void go(int x, int l)
{
	D[x] = 1;

	auto I = find(G[x].begin(), G[x].end(), l);
	if (I != G[x].end()) G[x].erase(I);

	for (auto &y : G[x]){
		go(y, x);
		D[x] = D[x] * (D[y] + 1) % mod;
	}
}

void go2(int x)
{
	int n = G[x].size();
	if (n){
		vector<long long> L(n); L[0] = 1;
		vector<long long> R(n); R.back() = 1;
		for (int i=1;i<n;i++) L[i] = L[i-1] * (D[G[x][i-1]] + 1) % mod;
		for (int i=n-2;i>=0;i--) R[i] = R[i+1] * (D[G[x][i+1]] + 1) % mod;
		for (int i=0;i<n;i++){
			int y = G[x][i];
			U[y] = (U[x] + 1) * L[i] % mod * R[i] % mod;
			go2(y);
		}
	}
	A[x] = D[x] * (U[x] + 1) % mod;
}

int main()
{
	scanf("%d %d", &N, &mod);
	for (int i=1;i<N;i++){
		int x, y; scanf("%d %d", &x, &y);
		G[x].push_back(y);
		G[y].push_back(x);
	}

	go(1, 0);
	go2(1);

	for (int i=1;i<=N;i++) printf("%lld\n", A[i]);

	return 0;
}