#include <bits/stdc++.h>
using namespace std;
const int maxn = 100 * 1000 + 21;
long long n, m, k, ans = 1, par[maxn], cnt;
int Fpar(int v) { return (par[v] < 0 ? v : par[v] = Fpar(par[v])); }
inline void merg(int v, int u) {
  v = Fpar(v);
  u = Fpar(u);
  if (v == u) return;
  cnt--;
  if (par[u] < par[v]) swap(u, v);
  par[v] += par[u];
  par[u] = v;
}
int main() {
  cin >> n >> m >> k;
  cnt = n;
  memset(par, -1, sizeof par);
  for (int i = 0, a, b; i < m; i++) {
    cin >> a >> b;
    a--, b--;
    merg(a, b);
  }
  for (int i = 0; i < n; i++)
    if (par[i] < 0 && cnt != 1) {
      ans *= abs(par[i]);
      ans %= k;
    }
  for (int i = 0; i < cnt - 2; i++) {
    ans *= n;
    ans %= k;
  }
  ans %= k;
  cout << ans;
}
