#include <bits/stdc++.h>
using namespace std;
int cur[100005];
int mark[100005];
int sol[400005];
int csol;
int n, m;
vector<int> E[100005];
inline void dfs(int u, int up) {
  mark[u] = 1;
  csol++;
  sol[csol] = u;
  cur[u] ^= 1;
  int last = 0;
  for (int i = 0; i < E[u].size(); i++)
    if (E[u][i] != up && mark[E[u][i]] == 0) {
      if (up == 0 && last != 0) {
        csol++;
        sol[csol] = u;
        cur[u] ^= 1;
      }
      dfs(E[u][i], u);
      last = 1;
      if (up != 0) {
        csol++;
        sol[csol] = u;
        cur[u] ^= 1;
      }
    }
  if (cur[u])
    if (up != 0) {
      csol++;
      sol[csol] = up;
      csol++;
      sol[csol] = u;
      cur[u] ^= 1;
      cur[up] ^= 1;
    } else {
      csol++;
      sol[csol] = u;
      cur[u] ^= 1;
    }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int p, k;
    scanf("%d%d", &p, &k);
    E[p].push_back(k);
    E[k].push_back(p);
  }
  for (int i = 1; i <= n; i++) scanf("%d", &cur[i]);
  int st = 0;
  for (int i = 1; i <= n; i++)
    if (cur[i]) st = i;
  if (st == 0) {
    printf("0\n");
    return 0;
  }
  dfs(st, 0);
  int ok = 1;
  for (int i = 1; i <= n; i++)
    if (cur[i]) ok = 0;
  if (ok) {
    printf("%d\n", csol);
    for (int i = 1; i <= csol; i++) printf("%d ", sol[i]);
  } else
    printf("-1\n");
}
