#include <bits/stdc++.h>
using namespace std;
bool seen[100005], x[100005];
vector<int> g[100005], ans;
inline void add(int u) { ans.push_back(u + 1), x[u] ^= 1; }
void dfs(int u, int p) {
  seen[u] = true;
  add(u);
  for (auto v : g[u])
    if (v != p && !seen[v]) dfs(v, u), add(u);
  if (x[u]) {
    if (p != -1)
      add(p), add(u);
    else
      x[u] = 0, ans.pop_back();
  }
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (auto i = (0); i < m; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    u--, v--;
    g[u].push_back(v), g[v].push_back(u);
  }
  for (auto i = (0); i < n; i++) scanf("%d", x + i);
  for (auto i = (0); i < n; i++)
    if (x[i]) {
      dfs(i, -1);
      break;
    }
  for (auto i = (0); i < n; i++)
    if (x[i]) {
      printf("-1");
      return 0;
    }
  printf("%d\n", ans.size());
  for (auto u : ans) printf("%d ", u);
  return 0;
}
