#include <stdio.h>
#include <vector>
using namespace std;

#define MAXN 500000
#define MAXM 500000

int N, M;
int car[MAXN];
int vis[MAXN];

// 0 = 

vector<int> edge[MAXN];

int err;

int qb, qe, bq[MAXN];

int main() {
  err=scanf("%d%d", &N, &M);
  for(int n=0; n<N; n++) err=scanf("%d", &car[n]);
  
  for(int m=0; m<M; m++) {
    int a,b;
    err=scanf("%d%d", &a, &b);
    a--; b--;
    edge[a].push_back(b);
    edge[b].push_back(a);
    }
  
  bq[qe++] = 0;
  while(qb<qe) {
    int at = bq[qb++];
    if(car[at]) continue;
    for(int t=0; t<int(edge[at].size()); t++) {
      int to = edge[at][t];
      if(vis[to]) continue;
      vis[to] = true;
      bq[qe++] = to;
      }
    }
  
  for(int n=0; n<N; n++) if(car[n] && vis[n]) printf("%d\n", n+1);
  
  return 0;
  }
