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;
void err(istream_iterator<string> it) { cerr << endl; }
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << ": " << a << " ";
  err(++it, args...);
}
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using pdd = pair<double, double>;
using vi = vector<int>;
using vii = vector<pii>;
using vs = vector<string>;
const int DR[] = {-1, 0, 1, 0};
const int DC[] = {0, -1, 0, 1};
const double PI = acos(-1.0);
const double EPS = 1e-9;
const int MOD = 1e9 + 7;
const int INF = 1073741823;
const ll INFLL = 4e18;
const int MAX = 3e5;
int N, M;
int num[MAX + 5];
vii adj[MAX + 5];
bool vis[MAX + 5];
pii par[MAX + 5];
int cnt;
priority_queue<pii> pq;
vi ans;
void read() {
  cin >> N >> M;
  for (int i = (int)1; i <= (int)N; i++) {
    cin >> num[i];
    if (num[i] == 1) cnt++;
  }
  for (int i = (int)1; i <= (int)M; i++) {
    int u, v;
    cin >> u >> v;
    adj[u].push_back({v, i});
    adj[v].push_back({u, i});
  }
}
void dfs(int v, int depth) {
  vis[v] = true;
  pq.push({depth, v});
  for (auto p : adj[v]) {
    int f = p.first;
    int id = p.second;
    if (!vis[f]) {
      par[f] = {v, id};
      dfs(f, depth + 1);
    }
  }
}
void solve() {
  for (int i = (int)1; i <= (int)N; i++)
    if (num[i] == -1) {
      if (cnt & 1)
        num[i] = 1, cnt++;
      else
        num[i] = 0;
    }
  if (cnt & 1) {
    cout << "-1\n";
    return;
  }
  dfs(1, 0);
  while (!pq.empty()) {
    int now = pq.top().second;
    pq.pop();
    if (num[now] == 1) {
      int p = par[now].first;
      int id = par[now].second;
      num[p] ^= 1;
      ans.push_back(id);
    }
  }
  cout << (int)ans.size() << "\n";
  for (int x : ans) cout << x << "\n";
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int TC = 1;
  while (TC--) {
    read();
    solve();
  }
}
