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

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

public class B {

	static int[] to, first, last, next, d;
	static boolean[] take;
	static boolean[] vis;
	
	static int dfs(int u, int pIdx)
	{
		vis[u] = true;
		int j = first[u], up = d[u] == 1 ? 1 : 0;
		while(j != -1)
		{
			int v = to[j];
			if(!vis[v])
				up ^= dfs(v, j >> 1);
			j = next[j];
		}
		if(up != 0)
			take[pIdx] = true;
		return up;
	}
	
	public static void main(String[] args) throws IOException {

		Scanner sc = new Scanner(System.in);
		PrintWriter out = new PrintWriter(System.out);

		int n = sc.nextInt(), m = sc.nextInt();
		d = new int[n];
		int cntOdd = 0, negNode = -1;
		for(int i = 0; i < n; ++i)
			if((d[i] = sc.nextInt()) == 1)
				++cntOdd;
			else if(d[i] == -1)
				negNode = i;
		if(cntOdd % 2 == 1 && negNode == -1)
			out.println(-1);
		else
		{
			if(cntOdd % 2 == 1)
				d[negNode] = 1;
			first = new int[n];
			last = new int[n];
			to = new int[m << 1];
			next = new int[m << 1];
			Arrays.fill(first, -1);
			Arrays.fill(next, -1);
			take = new boolean[m];
			for(int i = 0; i < m; ++i)
			{
				int u = sc.nextInt() - 1, v = sc.nextInt() - 1;
				if(first[u] == -1)
					first[u] = i << 1;
				else
					next[last[u]] = i << 1;
				to[i << 1] = v;
				last[u] = i << 1;
				
				if(first[v] == -1)
					first[v] = i << 1 | 1;
				else
					next[last[v]] = i << 1 | 1;
					
				to[i << 1 | 1] = u;
				last[v] = i << 1 | 1;
				
			}
			vis = new boolean[n];
			dfs(0, -1);
			int cnt = 0;
			StringBuilder sb = new StringBuilder();
			for(int i = 0; i < m; ++i)
				if(take[i])
				{
					sb.append(i + 1 + "\n");
					++cnt;
				}
			out.println(cnt);
			out.print(sb);
		}
		out.close();
	}	

	static class Scanner 
	{
		StringTokenizer st;
		BufferedReader br;

		public Scanner(InputStream s){	br = new BufferedReader(new InputStreamReader(s));}

		public Scanner(String s) throws FileNotFoundException{	br = new BufferedReader(new FileReader(s));}

		public String next() throws IOException 
		{
			while (st == null || !st.hasMoreTokens()) 
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		public int nextInt() throws IOException {return Integer.parseInt(next());}

		public long nextLong() throws IOException {return Long.parseLong(next());}

		public String nextLine() throws IOException {return br.readLine();}

		public double nextDouble() throws IOException { return Double.parseDouble(next()); }

		public boolean ready() throws IOException {return br.ready();} 
	}
}