#include <bits/stdc++.h>
using namespace std;
struct edge {
  int d, nex;
} e[100010];
int n, m, i, j, q[100010], efree, a[100010], x, y, w, ans[100010];
bool f[100010], flag, v[100010], g[100010];
inline void add(int x, int y) {
  e[++efree] = (edge){y, q[x]};
  q[x] = efree;
}
void dfs(int x) {
  f[x] = 1;
  for (int i = q[x]; i; i = e[i].nex) {
    if (a[x] != a[e[i].d] && a[e[i].d] != e[i].d) {
      flag = 1;
      return;
    }
    dfs(e[i].d);
  }
  if (a[x] == x) ans[++w] = x;
}
int main() {
  scanf("%d%d", &n, &m);
  for (i = 1; i <= m; i++) {
    scanf("%d%d", &x, &y);
    add(x, y);
    v[y] = 1;
  }
  for (i = 1; i <= n; i++) scanf("%d", &a[i]);
  f[0] = 1;
  for (i = 1; i <= n; i++)
    if (!v[i] && !f[i]) y = 0, dfs(i);
  if (flag) {
    puts("-1");
    return 0;
  }
  printf("%d\n", w);
  for (i = 1; i <= w; i++) printf("%d\n", ans[i]);
  return 0;
}
