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.awt.Point;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;



public class B {

	static StringTokenizer st;
	static BufferedReader br;
	static PrintWriter pw;
	static ArrayList<Point> []ages;
	static boolean[]used;
	static boolean[]killed;
	static int[]d, parity;
	public static void main(String[] args) throws IOException {
		br = new BufferedReader(new InputStreamReader(System.in));
		pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
		int n = nextInt();
		d = new int[n+1];
		ages = new ArrayList[n+1];
		int m = nextInt();
		used = new boolean[n+1];
		parity = new int[n+1];
		for (int i = 1; i <= n; i++) {
			ages[i] = new ArrayList<>();
		}
		int root = 1;
		for (int i = 1; i <= n; i++) {
			d[i] = nextInt();
			if (d[i]==-1)
				root = i;
		}
		killed = new boolean[m+1];
		for (int i = 1; i <= m; i++) {
			int v1 = nextInt();
			int v2 = nextInt();
			ages[v1].add(new Point(v2, i));
			ages[v2].add(new Point(v1, i));
			parity[v1] ^= 1;
			parity[v2] ^= 1;
		}
		
		dfs(root);
		if (d[root]!=-1 && parity[root] != d[root])
			pw.println(-1);
		else {
			int cntKilled = 0;
			for (int i = 1; i <= m; i++) {
				if (!killed[i])
					cntKilled++;
			}
			pw.println(cntKilled);
			for (int i = 1; i <= m; i++) {
				if (!killed[i])
					pw.print(i+" ");
			}
		}
		pw.close();
	}
	private static void dfs(int v) {
		used[v] = true;
		for (Point to : ages[v]) {
			if (used[to.x])
				continue;
			dfs(to.x);
			if (d[to.x] != -1 && d[to.x] != parity[to.x]) {
				parity[to.x] ^= 1; 
				parity[v] ^= 1;
				killed[to.y] = true;
			}
		}
	}
	private static int nextInt() throws IOException {
		return Integer.parseInt(next());
	}
	private static long nextLong() throws IOException {
		return Long.parseLong(next());
	}
	private static double nextDouble() throws IOException {
		return Double.parseDouble(next());
	}
	private static String next() throws IOException {
		while (st==null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine());
		return st.nextToken();
	}
}