#include <bits/stdc++.h>
using namespace std;
struct SNM {
  vector<SNM*> trgs;
  vector<SNM*> rv_trgs;
  int stype;
  bool asgn;
  bool used;
  void asgnN() {
    if (asgn) return;
    asgn = true;
    for (vector<SNM*>::iterator i = trgs.begin(); i != trgs.end(); i++) {
      (*i)->asgnN();
    }
  }
  void usedN() {
    if (used) return;
    used = true;
    if (stype == 1) return;
    for (vector<SNM*>::iterator i = rv_trgs.begin(); i != rv_trgs.end(); i++) {
      (*i)->usedN();
    }
  }
  SNM() {
    used = false;
    asgn = false;
  }
};
SNM nodes[100000];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%d", &nodes[i].stype);
  }
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    a--;
    b--;
    nodes[a].trgs.push_back(&nodes[b]);
    nodes[b].rv_trgs.push_back(&nodes[a]);
  }
  for (int i = 0; i < n; i++) {
    if (nodes[i].stype == 1) {
      nodes[i].asgnN();
    }
  }
  for (int i = 0; i < n; i++) {
    if (nodes[i].stype == 2) {
      nodes[i].usedN();
    }
  }
  for (int i = 0; i < n; i++) {
    if (nodes[i].asgn && nodes[i].used) {
      printf("1\n");
    } else {
      printf("0\n");
    }
  }
  return 0;
}
