#include <bits/stdc++.h>
struct {
  int to;
  int nextID;
} E[100010], R[100010];
int LE[100010], RE[100010];
int t[100010], afs[100010], lfs[100010];
void dfs(int s) {
  afs[s] = 1;
  int ID;
  for (ID = LE[s]; ID != 0; ID = E[ID].nextID)
    if (!afs[E[ID].to]) dfs(E[ID].to);
}
void ofs(int s) {
  lfs[s] = 1;
  if (t[s] == 1) return;
  int ID;
  for (ID = RE[s]; ID != 0; ID = R[ID].nextID)
    if (!lfs[R[ID].to]) ofs(R[ID].to);
}
int main(void) {
  int N, M;
  scanf("%i %i", &N, &M);
  int i;
  for (i = 1; i <= N; i++) scanf("%i", &t[i]);
  for (i = 1; i <= M; i++) {
    int u, v;
    scanf("%i %i", &u, &v);
    E[i].to = v;
    E[i].nextID = LE[u];
    LE[u] = i;
    R[i].to = u;
    R[i].nextID = RE[v];
    RE[v] = i;
  }
  for (i = 1; i <= N; i++)
    if (t[i] == 1) dfs(i);
  for (i = 1; i <= N; i++)
    if (t[i] == 2) ofs(i);
  for (i = 1; i <= N; i++)
    printf("%i%c", (afs[i] && lfs[i]) ? 1 : 0, (i == N) ? '\n' : ' ');
  return 0;
}
