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

//package ;
import java.awt.Point;
import java.io.*;
import java.util.*;


public class B {
	static int n,d[],a[];
	static ArrayList<Edge>[]adjLists;
	static class Edge
	{
		int i,node;
		public Edge(int v,int idx) {
			// TODO Auto-generated constructor stub
			i=idx;node=v;
		}
	}
	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner();
		PrintWriter pw = new PrintWriter(System.out);
		n=sc.nextInt();int m=sc.nextInt();
		d=new int[n];
		a=new int[n];
		adjLists=new ArrayList[n];
		int ones=0;
		for(int i=0;i<n;i++)
		{
			d[i]=sc.nextInt();
			adjLists[i]=new ArrayList<>();
			if(d[i]==1)
				ones++;
		}
		for(int i=0;i<n;i++)
		{
			if(d[i]==-1)
			{
				if(ones%2==1)
				{
					d[i]=1;
					ones++;
				}
				else
					d[i]=0;
			}
		}
		if(ones%2==1)
		{
			System.out.println(-1);
			return;
		}
		for(int i=1;i<=m;i++)
		{
			int u=sc.nextInt()-1;
			int v=sc.nextInt()-1;
			a[v]=1-a[v];a[u]=1-a[u];
			adjLists[u].add(new Edge(v, i));
			adjLists[v].add(new Edge(u, i));
		}
		hs=new HashSet<>();
		a=new int[n];
		vis=new boolean[n];
		dfs(0,-1,-1);
		pw.println(hs.size());
		for(int x:hs)
			pw.println(x);
		pw.close();
	}
	static HashSet<Integer>hs;
	static boolean vis[];
	static void dfs(int u,int p,int i)
	{
		vis[u]=true;
		for(Edge e:adjLists[u])
				if(e.node!=p && !vis[e.node])
					dfs(e.node,u,e.i);
		if(a[u]!=d[u] && p!=-1)
		{
			a[p]=1-a[p];
			a[u]=1-a[u];
			hs.add(i);
		}
	}
	static class Scanner {
		BufferedReader br;
		StringTokenizer st;

		Scanner() {
			br = new BufferedReader(new InputStreamReader(System.in));
		}

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

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

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

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

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

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

	}
}
