#include <bits/stdc++.h>
using namespace std;
const int MAXn = 1e5 + 10;
vector<int> adj[MAXn];
int acc[MAXn];
bool vis[MAXn];
int n, m, k;
int cc;
void dfs(int v) {
  vis[v] = true;
  acc[cc]++;
  for (int i = 0; i < (int)adj[v].size(); i++)
    if (!vis[adj[v][i]]) dfs(adj[v][i]);
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m >> k;
  for (int i = 0; i < m; i++) {
    int v1, v2;
    cin >> v1 >> v2;
    v1--;
    v2--;
    adj[v1].push_back(v2);
    adj[v2].push_back(v1);
  }
  for (int i = 0; i < n; i++)
    if (!vis[i]) {
      dfs(i);
      cc++;
    }
  if (cc == 1) {
    cout << 1 % k << endl;
    return 0;
  }
  long long res = 1;
  for (int i = 0; i < cc; i++) res = (res * acc[i]) % k;
  for (int i = 0; i < cc - 2; i++) res = (res * n) % k;
  cout << res << endl;
  return 0;
}
