#include <bits/stdc++.h>
using namespace std;
int n, m, md, k1, k2, in[705], out[705], f[705][705], a[705][705], q[705],
    s[705], t[705];
vector<int> g[705];
long long pw(long long a, long long b, long long p) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = (ans * a) % p;
    b >>= 1;
    a = (a * a) % p;
  }
  return ans;
}
long long ans = 1;
void gauss() {
  bool f = 1;
  for (int i = 1; i < k1; i++) {
    if (a[i][i] == 0) {
      for (int j = i + 1; j < k1; j++) {
        if (a[j][i]) {
          for (int k = i; k < k1; k++) swap(a[i][k], a[j][k]);
          f = !f;
          break;
        }
      }
      if (a[i][i] == 0) {
        puts("0");
        return;
      }
    }
    long long inv = pw(a[i][i], md - 2, md);
    for (int j = i + 1; j < k1; j++) {
      long long coef = a[j][i] * inv % md;
      for (int k = i; k < k1; k++) a[j][k] = (a[j][k] - a[i][k] * coef) % md;
    }
  }
  long long ans = 1;
  for (int i = 1; i < k1; i++) ans = ans * (a[i][i]) % md;
  ans = (ans % md + md) % md;
  if (!f) ans = (md - ans) % md;
  printf("%I64d\n", ans);
}
int main() {
  scanf("%d%d%d", &n, &m, &md);
  for (int i = 1; i <= m; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    g[u].push_back(v);
    in[v]++;
    out[u]++;
  }
  k1 = k2 = 1;
  for (int i = 1; i <= n; i++)
    if (!in[i]) s[k1++] = i;
  for (int i = 1; i <= n; i++)
    if (!out[i]) t[k2++] = i;
  int l = 1, r = 1;
  for (int i = 1; i <= n; i++)
    if (in[i] == 0) q[r++] = i;
  while (l < r) {
    int x = q[l++];
    for (int i = 0; i < g[x].size(); i++) {
      in[g[x][i]]--;
      if (in[g[x][i]] == 0) q[r++] = g[x][i];
    }
  }
  for (int i = 1; i < k1; i++) f[s[i]][s[i]] = 1;
  for (int i = 1; i <= n; i++) {
    int x = q[i];
    for (int j = 1; j < k1; j++) {
      int st = s[j];
      for (int k = 0; k < g[x].size(); k++)
        f[st][g[x][k]] = (f[st][g[x][k]] + f[st][x]) % md;
    }
  }
  for (int i = 1; i < k1; i++)
    for (int j = 1; j < k1; j++) a[i][j] = f[s[i]][t[j]];
  gauss();
  return 0;
}
