#include <bits/stdc++.h>
using namespace std;
vector<int> G[400100];
int A[400100], B[400100], p[400100], c[400100], f[400100], n, m, i, t, rt;
void Dfs(int x, int fa) {
  f[x] = 1;
  int sz = G[x].size(), i;
  p[++t] = x, B[x] ^= 1;
  for (i = 0; i < sz; i++) {
    int v = G[x][i];
    if (f[v]) continue;
    Dfs(v, x);
    if (A[v] != B[v]) {
      p[++t] = x, p[++t] = v;
      B[v] ^= 1, B[x] ^= 1;
    }
    if (p[t] != x) p[++t] = x, B[x] ^= 1;
  }
}
bool Check() {
  for (i = 1; i <= t; i++) c[p[i]] ^= 1;
  for (i = 1; i <= n; i++)
    if (c[i] != A[i]) return false;
  return true;
}
int main() {
  scanf("%d%d", &n, &m);
  for (i = 1; i <= m; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    G[u].push_back(v), G[v].push_back(u);
  }
  for (i = 1; i <= n; i++) scanf("%d", &A[i]);
  for (i = 1; i <= n; i++)
    if (A[i]) {
      rt = i, Dfs(i, 0);
      break;
    }
  if (B[rt] != A[rt]) p[++t] = G[rt][0], p[++t] = rt, p[++t] = G[rt][0];
  if (!Check()) {
    printf("-1");
    return 0;
  }
  printf("%d\n", t);
  for (i = 1; i <= t; i++) printf("%d ", p[i]);
  return 0;
}
