#include <bits/stdc++.h>
using namespace std;
bool vis[100005];
int ans[100005 * 4], tot[100005], pari[100005], cnt;
vector<int> v[100005];
void dfs(int x) {
  int sz, i, j;
  vis[x] = 1;
  ans[cnt++] = x;
  tot[x]++;
  sz = v[x].size();
  for (i = 0; i < sz; i++) {
    j = v[x][i];
    if (vis[j]) continue;
    dfs(j);
    ans[cnt++] = x;
    tot[x]++;
    if (tot[j] % 2 != pari[j]) {
      ans[cnt++] = j;
      tot[j]++;
      ans[cnt++] = x;
      tot[x]++;
    }
  }
}
int main() {
  int n, m, i, a, b, l;
  scanf("%d%d", &n, &m);
  for (i = 0; i < m; i++) {
    scanf("%d%d", &a, &b);
    v[a].push_back(b);
    v[b].push_back(a);
  }
  for (i = 1; i <= n; i++) scanf("%d", &pari[i]);
  for (i = 1; i <= n; i++) {
    if (pari[i]) {
      l = i;
      break;
    }
  }
  if (i > n)
    printf("0\n");
  else {
    dfs(l);
    for (i = 1; i <= n; i++) {
      if (pari[i] && !vis[i]) break;
    }
    if (i <= n)
      printf("-1\n");
    else {
      if (tot[l] % 2 != pari[l]) {
        ans[cnt++] = v[l][0];
        ans[cnt++] = l;
        ans[cnt++] = v[l][0];
      }
      printf("%d\n", cnt);
      for (i = 0; i < cnt; i++) {
        if (i) printf(" ");
        printf("%d", ans[i]);
      }
      printf("\n");
    }
  }
  return 0;
}
