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.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.InputMismatchException;
import java.util.Map;

public class Main implements Runnable {
  static InputStream is;
  static PrintWriter out;
  static String INPUT = "";

  static int[] d;
  static int[][] g;
  static int n;
  static int m;
  static Map<Long, Integer> map;
  static boolean[] visited;
  static boolean[] edgeFlg;
  
  static {
  }
  
  public void run() {
    n = ni();
    m = ni();
    
    d = na(n);
    int[] from = new int[m];
    int[] to = new int[m];
    map = new HashMap<>();
    for (int i = 0; i < m; i++) {
      from[i] = ni() - 1;
      to[i] = ni() - 1;
      
      map.put(hash(from[i], to[i]), i);
      map.put(hash(to[i], from[i]), i);
    }
    g = packU(n, from, to);
    visited = new boolean[n];
    edgeFlg = new boolean[m];
    
    int start = 0;
    for (int i = 0; i < n; i++) {
      if (d[i] < 0) {
        start = i;
        break;
      }
    }

    int x = dfs(start);
    
    if (x > 0) {
      out.println(-1);
    } else {
      
      StringBuilder sb = new StringBuilder();
      int count = m;
      for (int i = 0; i < m; i ++) {
        if (edgeFlg[i]) {
          count --;
        } else {
          sb.append((i + 1) + "\n");
        }
      }
      out.println(count);
      out.print(sb);
    }
    out.flush();
  }
  
  private static long hash(int from, int to) {
    return from * 10000000000L + to;
  }

  private static int dfs(int now) {
    visited[now] = true;
    int ret = 0;
    if (d[now] >= 0 && g[now].length % 2 != d[now]) {
      ret ++;
    }

    for (int next : g[now]) {
      if (!visited[next]) {
        int x = dfs(next);
        ret += x;
        
        if (x > 0) {
          int eid = map.get(hash(now, next));
          edgeFlg[eid] = true;
        }
      }
    }
    return d[now] == -1 ? 0 : ret % 2;
  }

  public static int[][] packU(int n, int[] from, int[] to){ return packU(n, from, to, from.length); }
  public static int[][] packU(int n, int[] from, int[] to, int sup)
  {
      int[][] g = new int[n][];
      int[] p = new int[n];
      for(int i = 0;i < sup;i++)p[from[i]]++;
      for(int i = 0;i < sup;i++)p[to[i]]++;
      for(int i = 0;i < n;i++)g[i] = new int[p[i]];
      for(int i = 0;i < sup;i++){
          g[from[i]][--p[from[i]]] = to[i];
          g[to[i]][--p[to[i]]] = from[i];
      }
      return g;
  }
  
  
  public static void main(String[] args) throws Exception {
    long S = System.currentTimeMillis();
    is = INPUT.isEmpty() ? System.in : new ByteArrayInputStream(INPUT.getBytes());
    out = new PrintWriter(System.out);
    new Thread(null, new Main(), "", 64 * 1024 * 1024).start();
    long G = System.currentTimeMillis();
    tr(G - S + "ms");
  }

  private static boolean eof() {
    if (lenbuf == -1)
      return true;
    int lptr = ptrbuf;
    while (lptr < lenbuf)
      if (!isSpaceChar(inbuf[lptr++]))
        return false;

    try {
      is.mark(1000);
      while (true) {
        int b = is.read();
        if (b == -1) {
          is.reset();
          return true;
        } else if (!isSpaceChar(b)) {
          is.reset();
          return false;
        }
      }
    } catch (IOException e) {
      return true;
    }
  }

  private static byte[] inbuf = new byte[1024];
  static int lenbuf = 0, ptrbuf = 0;

  private static 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 static boolean isSpaceChar(int c) {
    return !(c >= 33 && c <= 126);
  }

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

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

  private static String ns() {
    int b = skip();
    StringBuilder sb = new StringBuilder();
    while (!(isSpaceChar(b))) {
      sb.appendCodePoint(b);
      b = readByte();
    }
    return sb.toString();
  }

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

  private static int ni() {
    return (int) nl();
  }

  private static 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 static void tr(Object... o) {
    if (INPUT.length() != 0)
      System.out.println(Arrays.deepToString(o));
  }
}


