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;
const int N=3e5+2;
const int LOG=20;
vector<pair<int,int> > adj[N],adj_mst[N];
int cnt[N],ancestor[LOG][N],val[N],deg[N],level[N];
vector<int> ans_lis,lis;
bool used[N];
int findd(int x,int k){
	while(k){
		int y=__lg(k);
		x=ancestor[y][x];
		k-=(1<<y);
	}
	return x;
}
int LCA(int x,int y){
	if(level[x]>level[y]){
		x=findd(x,level[x]-level[y]);
	}
	y=findd(y,level[y]-level[x]);
	if(x==y){
		return x;
	}
	for(int i=LOG-1;i>-1;i--){
		if(ancestor[i][x]!=ancestor[i][y]){
			x=ancestor[i][x],y=ancestor[i][y];
		}
	}
	return ancestor[0][x];
}
void add(int x,int y){
	int lca=LCA(x,y);
	cnt[x]++;
	cnt[y]++;
	cnt[lca]-=2;
}
void dfs(int x){
	used[x]=true;
	for(int i=1;i<LOG;i++){
		ancestor[i][x]=ancestor[i-1][ancestor[i-1][x]];
	}
	for(auto i:adj[x]){
		if(!used[i.first]){
			level[i.first]=level[x]+1;
			dfs(i.first);
			adj_mst[x].push_back(i);
		}
	}
}
void dfs1(int x,int idx){
	for(auto i:adj_mst[x]){
		dfs1(i.first,i.second);
		cnt[x]+=cnt[i.first];
	}
	if(cnt[x]&1){
		ans_lis.push_back(idx);
	}
}
void dfs2(int x,int idx,int par){
	used[x]=true;
	for(auto i:adj[x]){
		if(!used[i.first]){
			dfs2(i.first,i.second,x);
		}
	}
	if(deg[x]!=val[x]&&val[x]!=-1){
		deg[par]++;
		ans_lis.push_back(idx);
	}
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n,m,i,j,k,l,idx=0,hihi=0;
	cin>>n>>m;
	for(i=1;i<=n;i++){
		cin>>val[i];
		if(val[i]==-1){
			idx=i;
		}
		else{
			hihi^=val[i];
		}
	}
	for(i=1;i<=m;i++){
		cin>>j>>k;
		adj[j].push_back({k,i});
		adj[k].push_back({j,i});
	}
	if(!idx){
		if(hihi){
			cout<<-1;	
		}
		else{
			dfs(1);
			for(i=1;i<=n;i++){
				if(val[i]==1){
					if(!lis.size()){
						lis.push_back(i);
					}
					else{
						add(lis.back(),i);
						lis.pop_back();
					}
				}
			}
			dfs1(1,0);
			cout<<ans_lis.size()<<'\n';
			for(i=0;i<ans_lis.size();i++){
				cout<<ans_lis[i]<<' ';
			}
		}
		return 0;
	}
	dfs2(idx,0,0);
	cout<<ans_lis.size()<<'\n';
	for(i=0;i<ans_lis.size();i++){
		cout<<ans_lis[i]<<'\n';
	}
}