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.*;
import java.math.*;
import java.util.*;

public class CODEFORCES
{
	private InputStream is;
	private PrintWriter out;

	ArrayList<Integer> a[];
	int[] d, parent;
	boolean v[], u[],w[];
	HashMap<Pair, Integer> map = new HashMap<Pair, Integer>();

	public class Pair implements Comparable<Pair>
	{
		long u;
		long v;

		public Pair(long u, long v)
		{
			this.u = u;
			this.v = v;
		}

		public int hashCode()
		{
			int hu = (int) (u ^ (u >>> 32));
			int hv = (int) (v ^ (v >>> 32));
			return 31 * hu + hv;
		}

		public boolean equals(Object o)
		{
			Pair other = (Pair) o;
			return u == other.u && v == other.v;
		}

		public int compareTo(Pair other)
		{
			return Long.compare(u, other.u) != 0 ? Long.compare(u, other.u) : Long.compare(v, other.v);
		}

		public String toString()
		{
			return u + " " + v;
		}
	}

	void dfs2(int p, int q)
	{
		v[p] = true;
		for (int i : a[p])
		{
			if (i == q || v[i])
				continue;
			parent[i] = p;
			dfs2(i, p);
		}
	}

	void dfs(int p, int q)
	{
		v[p] = true;
		for (int i : a[p])
		{
			if (i == q || v[i])
				continue;
			dfs(i, p);
		}
		if (d[p] == -1 || d[p] == 0)
			return;
		for (int i : a[p])
		{
			if (i == q || u[i])
				continue;
			if (d[i] != -1)
				d[i] = 1 - d[i];
			d[p] = 1 - d[p];
			mp.add(map.get(new Pair(Math.min(i, p),Math.max(i, p))));
			u[p] = true;
			return;
		}
		if (parent[p] != -1)
		{
			int i = q;
			if (d[i] != -1)
				d[i] = 1 - d[i];
			d[p] = 1 - d[p];
			mp.add(map.get(new Pair(Math.min(i, p), Math.max(i, p))));
			u[p] = true;
			return;
		}
	}

	ArrayList<Integer> mp = new ArrayList<Integer>();

	void solve()
	{
		int n = ni(), m = ni();
		int root = 0;
		d = new int[n];
		v = new boolean[n];
		u = new boolean[n];
		w = new boolean[m];
		for (int i = 0; i < n; i++)
		{
			d[i] = ni();
			if (d[i] == -1)
				root = i;
		}
		parent = new int[n];
		Arrays.fill(parent, -1);
		a = new ArrayList[n];
		for (int i = 0; i < n; i++)
			a[i] = new ArrayList<Integer>();
		for (int i = 0; i < m; i++)
		{
			int x = ni() - 1, y = ni() - 1;
			a[x].add(y);
			a[y].add(x);
			map.put(new Pair(Math.min(x, y), Math.max(x, y)), i);
		}
		dfs2(root, root);
		Arrays.fill(v, false);
		dfs(root, root);
		if (d[root] == -1 || d[root] % 2 == 0)
		{
			out.println(mp.size());
			for (int i : mp)
				out.println(i+1);
			return;
		}
		out.println("-1");
	}

	void soln() throws Exception
	{
		is = System.in;
		out = new PrintWriter(System.out);
		long s = System.currentTimeMillis();
		solve();
		out.flush();
		tr(System.currentTimeMillis() - s + "ms");
	}

	public static void main(String[] args) throws Exception
	{
		new CODEFORCES().soln();
	}

	// To Get Input
	// Some Buffer Methods
	private byte[] inbuf = new byte[1024];
	public int lenbuf = 0, ptrbuf = 0;

	private int readByte()
	{
		if (lenbuf == -1)
			throw new InputMismatchException();
		if (ptrbuf >= lenbuf)
		{
			ptrbuf = 0;
			try
			{
				lenbuf = is.read(inbuf);
			} catch (IOException e)
			{
				throw new InputMismatchException();
			}
			if (lenbuf <= 0)
				return -1;
		}
		return inbuf[ptrbuf++];
	}

	private boolean isSpaceChar(int c)
	{
		return !(c >= 33 && c <= 126);
	}

	private int skip()
	{
		int b;
		while ((b = readByte()) != -1 && isSpaceChar(b))
			;
		return b;
	}

	private double nd()
	{
		return Double.parseDouble(ns());
	}

	private char nc()
	{
		return (char) skip();
	}

	private String ns()
	{
		int b = skip();
		StringBuilder sb = new StringBuilder();
		while (!(isSpaceChar(b)))
		{ // when nextLine, (isSpaceChar(b) && b != '
			// ')
			sb.appendCodePoint(b);
			b = readByte();
		}
		return sb.toString();
	}

	private char[] ns(int n)
	{
		char[] buf = new char[n];
		int b = skip(), p = 0;
		while (p < n && !(isSpaceChar(b)))
		{
			buf[p++] = (char) b;
			b = readByte();
		}
		return n == p ? buf : Arrays.copyOf(buf, p);
	}

	private char[][] nm(int n, int m)
	{
		char[][] map = new char[n][];
		for (int i = 0; i < n; i++)
			map[i] = ns(m);
		return map;
	}

	private int[] na(int n)
	{
		int[] a = new int[n];
		for (int i = 0; i < n; i++)
			a[i] = ni();
		return a;
	}

	private int ni()
	{
		int num = 0, b;
		boolean minus = false;
		while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'))
			;
		if (b == '-')
		{
			minus = true;
			b = readByte();
		}

		while (true)
		{
			if (b >= '0' && b <= '9')
			{
				num = num * 10 + (b - '0');
			} else
			{
				return minus ? -num : num;
			}
			b = readByte();
		}
	}

	private long nl()
	{
		long num = 0;
		int b;
		boolean minus = false;
		while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'))
			;
		if (b == '-')
		{
			minus = true;
			b = readByte();
		}

		while (true)
		{
			if (b >= '0' && b <= '9')
			{
				num = num * 10 + (b - '0');
			} else
			{
				return minus ? -num : num;
			}
			b = readByte();
		}
	}

	private boolean oj = System.getProperty("ONLINE_JUDGE") != null;

	private void tr(Object... o)
	{
		if (!oj)
			System.out.println(Arrays.deepToString(o));
	}
}