3 2
1 0 1
1 2
2 3
 10 10
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
6 7
8 3
6 4
4 2
9 2
5 10
9 8
10 7
5 1
6 2

2
1
2
 0

#include <bits/stdc++.h>
using namespace std;
constexpr int sz = 300005;
int n, m;
vector<vector<int>> g(sz), e(sz);
int deg[sz];
int vis[sz];
vector<int> ans;
int dfs(int u) {
  if (vis[u]) return 0;
  vis[u] = 1;
  int con = 0;
  if (deg[u] == 1) con = 1;
  for (int i = 0; i < g[u].size(); ++i) {
    int v = g[u][i];
    int k = dfs(v);
    con += k;
    if (k & 1) {
      ans.push_back(e[u][i]);
    }
  }
  return con;
}
int main() {
  ios_base::sync_with_stdio(0);
  int odd = 0;
  int neg = 0;
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    cin >> deg[i];
    odd += (deg[i] == 1);
    neg = (deg[i] == -1 ? i : neg);
  }
  for (int i = 1, v, u; i <= m; ++i) {
    cin >> v >> u;
    g[u].push_back(v);
    g[v].push_back(u);
    e[u].push_back(i);
    e[v].push_back(i);
  }
  if ((odd & 1) && !neg) cout << "-1" << endl, exit(0);
  if (odd & 1) deg[neg] = 1;
  dfs(1);
  cout << ans.size() << endl;
  copy(ans.begin(), ans.end(), ostream_iterator<int>(cout, "\n"));
}
