#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<int> gr[(ll)(1e5 + 7)], ans;
bool ch[(ll)(1e5 + 7)], req[(ll)(1e5 + 7)], vis[(ll)(1e5 + 7)];
void add(int node) {
  ch[node] ^= 1;
  ans.push_back(node);
}
void dfs(int node, int par) {
  vis[node] = 1;
  add(node);
  for (int x : gr[node]) {
    if (!vis[x]) {
      dfs(x, node);
      add(node);
    }
  }
  if (par && ch[node] != req[node]) {
    add(par);
    add(node);
  }
}
int main() {
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    gr[u].push_back(v);
    gr[v].push_back(u);
  }
  int root = 0;
  for (int i = 1; i <= n; i++) {
    cin >> req[i];
    if (req[i]) {
      root = i;
    }
  }
  if (root) {
    dfs(root, 0);
    if (ch[root] != req[root] && gr[root].size()) {
      add(gr[root].front());
      add(root);
      add(gr[root].front());
    }
  }
  bool fl = 1;
  for (int i = 1; i <= n && fl; i++) {
    if (ch[i] != req[i]) {
      fl = 0;
    }
  }
  if (!fl) {
    cout << "-1\n";
  } else {
    cout << ans.size() << "\n";
    for (int x : ans) {
      cout << x << " ";
    }
    cout << "\n";
  }
}
