#include <bits/stdc++.h>
using namespace std;
const int MAXN = 110000;
vector<int> g[MAXN];
vector<int> gt[MAXN];
bool used1[MAXN];
bool used2[MAXN];
int n, m;
int f[MAXN];
void dfs1(int v) {
  if (used1[v]) return;
  used1[v] = true;
  for (int i = 0; i < (int)g[v].size(); i++) dfs1(g[v][i]);
}
void dfs2(int v) {
  if (used2[v]) return;
  used2[v] = true;
  if (f[v] == 1) return;
  for (int i = 0; i < (int)gt[v].size(); i++) dfs2(gt[v][i]);
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n; i++) scanf("%d", &f[i]);
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    --a, --b;
    g[a].push_back(b);
    gt[b].push_back(a);
  }
  for (int i = 0; i < n; i++)
    if (f[i] == 1) dfs1(i);
  for (int i = 0; i < n; i++)
    if (f[i] == 2) dfs2(i);
  for (int i = 0; i < n; i++)
    if (used1[i] && used2[i])
      printf("1\n");
    else
      printf("0\n");
  return 0;
}
