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.util.*;
import java.io.*;
public class C {

	
	static ArrayList<edge> []adj;
	static int []d;
	static edge[]p;
	static ArrayList<Integer> []levels;
	
	static void dfs(int u,int level) {
		levels[level].add(u);
		for(edge nxt:adj[u]) {
			int v=nxt.v;
			if(p[v]==null && v!=0)
			{
				p[v]=new edge(u,nxt.idx);
				dfs(v,level+1);
			}
		}
	}
	public static void main(String[] args) throws IOException {
		Scanner sc=new Scanner(System.in);
		PrintWriter  pw=new PrintWriter(System.out);
		int n=sc.nextInt(),m=sc.nextInt();
		adj=new ArrayList[n];
		levels=new ArrayList[n];
		d=new int [n];
		int parity=0;
		for(int i=0;i<n;i++)
		{
			d[i]=sc.nextInt();
			if(d[i]==1)
				parity=1-parity;
			adj[i]=new ArrayList();
			levels[i]=new ArrayList();
		}
		if(parity==0) {
			for(int i=0;i<n;i++)
				if(d[i]==-1)
					d[i]=0;
		}
		else {
			boolean found=false;
			for(int i=0;i<n && !found;i++)
				if(d[i]==-1)
				{
					d[i]=1;
					found=true;
				}
			if(!found) {
				System.out.println(-1);
				return;
			}
		}
		
		for(int i=1;i<=m;i++)
		{
			int u=sc.nextInt()-1,v=sc.nextInt()-1;
			adj[u].add(new edge(v,i));
			adj[v].add(new edge(u,i));
		}
		ArrayList<Integer> ans=new ArrayList();
		p=new edge[n];
		dfs(0,0);
		for(int level=n-1;level>=0;level--)
			for(int u:levels[level])
			{
				if(d[u]==1 && u==0)
				{
					System.out.println(-1);
					return;
				}
				if(d[u]==1)
				{
					int v=p[u].v;
					d[v]=1-d[v];
					ans.add(p[u].idx);
				}
			}
		pw.println(ans.size());
		for(int x:ans)
			pw.print(x+" ");
		pw.close();
	}
	
	static class edge
	{
		int idx,v;
		edge(int a,int b){
			v=a;
			idx=b;
		}
	}
	static class Scanner {
        StringTokenizer st;
        BufferedReader br;
 
        public Scanner(InputStream s) {
            br = new BufferedReader(new InputStreamReader(s));
        }
 
        public Scanner(FileReader s) {
            br = new BufferedReader(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 boolean ready() throws IOException {return br.ready();}
        public double nextDouble() throws IOException {return Double.parseDouble(next());}
       
    }

}