#include <bits/stdc++.h>
using namespace std;
struct Node;
struct Edge {
  Node* a;
  Node* b;
  bool use;
  Edge() { use = false; }
  Edge(Node* a_, Node* b_) : a(a_), b(b_), use(false) {}
  Node* other(Node* current) { return current == a ? b : a; }
};
struct Node {
  vector<Edge*> edges;
  int d;
  Edge* prev;
  bool visited;
  Node() { visited = false; }
  void flip() {
    if (d != -1) d = !d;
  }
};
const int SIZE = 3 * 100000 + 5;
Node nodes[SIZE];
Edge edges[SIZE];
int n, m;
vector<Node*> inOrder;
Node* firstNeg = NULL;
void bfs(Node* start) {
  start->visited = true;
  queue<Node*> q;
  q.push(start);
  while (!q.empty()) {
    Node* n = q.front();
    q.pop();
    if (n->d == -1 && firstNeg == NULL) {
      firstNeg = n;
    }
    inOrder.push_back(n);
    for (int i = 0; i < n->edges.size(); ++i) {
      Node* other = n->edges[i]->other(n);
      if (!other->visited) {
        other->visited = true;
        other->prev = n->edges[i];
        q.push(other);
      }
    }
  }
}
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    cin >> nodes[i].d;
  }
  for (int i = 1; i <= m; ++i) {
    int a, b;
    cin >> a >> b;
    Edge* e = edges + i;
    *e = Edge(nodes + a, nodes + b);
    nodes[a].edges.push_back(e);
    nodes[b].edges.push_back(e);
  }
  int root = 1;
  for (; root <= n && nodes[root].d == -1; ++root)
    ;
  if (root > n) {
    cout << "0" << endl;
    return 0;
  }
  bfs(nodes + root);
  for (int i = inOrder.size() - 1; i > 0; --i) {
    Node* n = inOrder[i];
    if (n->d == 1) {
      n->prev->a->flip();
      n->prev->b->flip();
      n->prev->use = !n->prev->use;
    }
  }
  if (nodes[root].d == 1) {
    if (firstNeg == NULL) {
      cout << "-1" << endl;
      return 0;
    }
    Node* n = firstNeg;
    while (n != nodes + root) {
      n->prev->a->flip();
      n->prev->b->flip();
      n->prev->use = !n->prev->use;
      n = n->prev->other(n);
    }
  }
  vector<int> e;
  for (int i = 1; i <= m; ++i) {
    if (edges[i].use) e.push_back(i);
  }
  cout << e.size() << endl;
  for (int i = 0; i < e.size(); ++i) cout << e[i] << endl;
}
