#include <bits/stdc++.h>
using namespace std;
const int MaxN = 610;
int n, m, in[MaxN], out[MaxN], idx[MaxN];
int K, st[MaxN], ed[MaxN];
long long mod, dp[MaxN], a[MaxN][MaxN];
struct Edge {
  int v;
  Edge *nxt;
} buf[100005], *g[MaxN], *pt;
void add(int u, int v) {
  pt->v = v;
  pt->nxt = g[u];
  g[u] = pt++;
}
long long sol(int u) {
  if (dp[u] != -1) return dp[u];
  long long &ret = dp[u];
  ret = 0;
  for (Edge *now = g[u]; now; now = now->nxt) {
    ret = ret + sol(now->v);
    if (ret >= mod) ret -= mod;
  }
  return ret;
}
long long Pow(long long x, long long n) {
  long long ret = 1;
  while (n > 0) {
    if (n & 1) ret = ret * x % mod;
    x = x * x % mod;
    n /= 2;
  }
  return ret;
}
long long cal() {
  long long ret = 1;
  int neg = 0;
  for (int i = 0; i < K; i++) {
    int j = i;
    for (; j < K && a[j][i] == 0; j++)
      ;
    if (j == K) return 0;
    if (j != i) {
      neg ^= 1;
      for (int k = 0; k < K; k++) swap(a[i][k], a[j][k]);
    }
    for (j = i + 1; j < K; j++) {
      long long c = (mod - a[j][i]) * Pow(a[i][i], mod - 2) % mod;
      for (int k = i; k < K; k++) a[j][k] = (a[j][k] + c * a[i][k] % mod) % mod;
    }
    ret = ret * a[i][i] % mod;
  }
  if (neg) ret = (mod - ret) % mod;
  return ret;
}
int main() {
  scanf("%d%d%I64d", &n, &m, &mod);
  memset(g, 0, sizeof(g));
  pt = buf;
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    a--;
    b--;
    add(b, a);
    in[b]++;
    out[a]++;
  }
  int p1 = 0, p2 = 0;
  for (int i = 0; i < n; i++) {
    if (!in[i] && out[i]) st[p1++] = i;
    if (!out[i] && in[i]) ed[p2++] = i;
  }
  K = p1;
  for (int i = 0; i < K; i++) {
    for (int j = 0; j < n; j++) dp[j] = -1;
    dp[st[i]] = 1;
    for (int j = 0; j < K; j++) a[i][j] = sol(ed[j]);
  }
  long long ret = cal();
  for (int i = 0; i < n; i++)
    if (!in[i] && !out[i]) {
      int c1 = 0, c2 = 0;
      for (int j = 0; j < K; j++) {
        if (st[j] < i) c1++;
        if (ed[j] < i) c2++;
      }
      if (c1 % 2 != c2 % 2) ret = mod - ret;
    }
  printf("%I64d\n", ret % mod);
  return 0;
}
