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

public class Solution{

    private static int[] color;
    private static boolean[] usedEdge, usedV;
    private static int cntEdges = 0;
    private static List< Map<Integer, Integer> > graph;
    private static int root;

    private static int[] degree;

    public static void main(String[] args) throws Exception {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(reader.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        color = new int[n];
        usedEdge = new boolean[m];
        Arrays.fill(usedEdge, false);

        usedV = new boolean[n];
        Arrays.fill(usedV, false);

        degree = new int[n];
        Arrays.fill(degree, 0);

        graph = new ArrayList<>(n);
        for (int i = 0; i < n; ++i)
            graph.add(new TreeMap<>());

        st = new StringTokenizer(reader.readLine());
        root = 0;
        for (int i = 0; i < n; ++i) {
            color[i] = Integer.parseInt(st.nextToken());

            if (color[i] == -1)
                root = i;
        }

        for (int i = 0; i < m; ++i) {
            st = new StringTokenizer(reader.readLine());

            int x = Integer.parseInt(st.nextToken()) - 1;
            int y = Integer.parseInt(st.nextToken()) - 1;

            graph.get(x).put(y, i);
            graph.get(y).put(x, i);
        }

        reader.close();

        dfs(root);

        if (color[root] != -1 && degree[root] != color[root]) {
            System.out.println(-1);
            return;
        }

        System.out.println(cntEdges);

        for (int i = 0; i < m; ++i) {
            if (usedEdge[i])
                System.out.println(i + 1);
        }
    }

    private static void dfs(int v) {

        usedV[v] = true;

        for (Map.Entry<Integer, Integer> entry: graph.get(v).entrySet()) {
            int nextv = entry.getKey();

            if (usedV[nextv])
                continue;

            dfs(nextv);

            if (color[nextv] == -1 || degree[nextv] == color[nextv])
                continue;

            usedEdge[entry.getValue()] = true;
            cntEdges++;
            degree[v] = (degree[v] + 1) % 2;
            degree[nextv] = (degree[nextv] + 1) % 2;
        }
    }
}
