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 <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <map>
#include <set>
#include <cmath>
#include <vector>
#include <ctime>
#include <queue>
#include <sstream>
#include <utility>
#include <bitset>
#include <stack>

using namespace std;

#define MP make_pair 
#define PB push_back 
#define INF (1000000007) 
#define eps 1e-8
#define MOD (1000000007)

typedef pair<int,int> pii ;
typedef long long ll ;

int n,m;
vector<pii> v[300005];
int ind[300005],d[300005],prev[300005],thr[300005];
pii ed[300005];
bool ans[300005],visit[300005];
bool used[300005];
queue<int> q;
stack<int> st,st2;
map<pii,bool> mp;

inline void Fail()
{
	cout<<-1;
	exit(0);
}

inline void Findans(int f,int t)
{
	used[f]=1;
	used[t]=1;
	if(f==t) Fail();
	while(prev[t]!=-1)
	{
		ans[thr[t]]^=1;
		if(t==prev[t]) break;
		t=prev[t];
	}
}

inline void bfs(int x)
{
	ind[x]=1;
	prev[x]=-1;
	q.push(x);
	bool en=0;
	while(!q.empty())
	{
		int t=q.front();
		q.pop();
		if(d[t]==1)
		{
			st.push(t);
			st2.push(t);
		}
		for(int i=0;i<v[t].size();i++)
		{
			if(ind[v[t][i].first]!=1)
			{
				ind[v[t][i].first]=1;
				prev[v[t][i].first]=t;
				thr[v[t][i].first]=v[t][i].second;
				q.push(v[t][i].first);
			}
		}
	}
}

int main()
{
//	ios::sync_with_stdio(false);
	scanf("%d%d",&n,&m);
	bool f=0;
	int s=0,tmp=-1;
	int tm=m;
	for(int i=1;i<=n;i++) 
	{
		scanf("%d",&d[i]);
		if(d[i]==-1) f=1,tmp=i;
		else s+=d[i];
	}
	if(s&1)
	{
		if(!f) Fail();
		else d[tmp]=1;
	}
	for(int i=1;i<=m;i++)
	{
		int a,b;
		scanf("%d%d",&a,&b);
		if(mp[MP(a,b)]==1) 
		{
			continue;
		}
		mp[MP(a,b)]=1;
		ed[i]=MP(a,b);
		v[a].PB(MP(b,i));
		v[b].PB(MP(a,i));
	}
	for(int i=1;i<=n;i++)
	{
		if(d[i]==1) 
		{
			bfs(i);
			break; 
		}
	}
//	cout<<"AAA"<<prev[3];
	while(!st.empty())
	{
		int t=st.top();
		st.pop();
		used[t]^=1;
		while(prev[t]!=-1 && d[prev[t]]!=1)
		{
//			cout<<t<<" ";
			used[prev[t]]=used[t];
			t=prev[t];
		}
		used[prev[t]]^=used[t];
//		cout<<endl;
	}
	while(!st2.empty())
	{
		int t=st2.top();
		st2.pop();
		f=used[t];
		if(!f) continue;
		while(prev[t]!=-1)
		{
			ans[thr[t]]=1;
			t=prev[t];
			if(d[t]==1) break;
		}
	}
	int sum=0;
	for(int i=1;i<=m;i++) if(ans[i]) sum++;
	printf("%d\n",sum);
	for(int i=1;i<=m;i++) if(ans[i]) printf("%d\n",i);
	return 0;
}