#include <bits/stdc++.h>
using namespace std;
int n, m, k, p[100000], sz[100000];
int find(int x) {
  if (p[x] == x) return x;
  return p[x] = find(p[x]);
}
int Pow(int b, int p) {
  if (!p) return 1;
  long long z = Pow(b, p / 2);
  if (p & 1) return z * z % k * b % k;
  return z * z % k;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  int a, b;
  for (int i = 0; i < n; ++i) {
    p[i] = i;
    sz[i] = 1;
  }
  int N = n;
  while (m--) {
    scanf("%d%d", &a, &b);
    --a;
    --b;
    a = find(a);
    b = find(b);
    if (a != b) {
      --N;
      p[a] = b;
      sz[b] += sz[a];
    }
  }
  if (N == 1) {
    printf("%d", 1 % k);
    return 0;
  }
  long long res = Pow(n, N - 2);
  for (int i = 0; i < n; ++i)
    if (p[i] == i) res = res * sz[i] % k;
  printf("%lld\n", res);
  return 0;
}
