#include <bits/stdc++.h>

#define N 100001

typedef long long ll;

using namespace std;

int n, m;
vector<int> g[N];
vector<int> tree[N];
ll in[N];
ll out[N];

void dfs1(int u, int p)
{
	in[u] = 1;
	for (int v : g[u])
	{
		if (v == p)
			continue;
		tree[u].push_back(v);
		dfs1(v, u);
		in[u] = (in[u] * ((1 + in[v]) % m)) % m;
	}
}

void dfs2(int u, int p)
{
	int len = tree[u].size();
	ll left[len], right[len];
	for (int i = 0; i < len; i++)
	{
		int v = tree[u][i];
		left[i] = (i == 0) ? ((1 + in[v]) % m) : ((left[i - 1] * ((1 + in[v]) % m)) % m);
	}
	for (int i = len - 1; i >= 0; i--)
	{
		int v = tree[u][i];
		right[i] = (i == len - 1) ? ((1 + in[v]) % m) : ((((1 + in[v]) % m) * right[i + 1]) % m);
	}
	//cout << u << " " << len << endl;
	for (int i = 0; i < len; i++)
	{
		int v = tree[u][i];
		//cout << len << " ";
		//cout << ((i == 0 ? 1 : (1 + left[i - 1])) * ((i == len - 1 ? 1 : (1 + right[i + 1])) * (1 + out[p]))) << endl;
		out[v] = (1 + ((((i == 0 ? 1 : left[i - 1]) * (i == len - 1 ? 1 : right[i + 1])) % m) * (out[u])%m) % m) % m;
		dfs2(v, u);
	}
}

int main()
{
	cin >> n >> m;
	for (int i = 0; i < n - 1; i++)
	{
		int x, y;
		cin >> x >> y;
		g[x].push_back(y);
		g[y].push_back(x);
	}
	dfs1(1, 0);
	out[1] = 1;
	dfs2(1, 0);
	for (int i = 1; i <= n; i++)
	{
		//cout << in[i] << " " << out[i] << " ";
		cout << (in[i]*out[i]) % m << endl;
	}
	return 0;
}
