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

/**
 * Created by amir.
 */

public class Main {

    class Pair {
        int x, id;

        Pair(int x, int id) {
            this.x = x;
            this.id = id;
        }
    }

    List<List<Pair>> edges = new ArrayList<>();
    int[] a;
    int[] was;
    List<Integer> ans;

    int dfs(int x, int edgeId) {
        was[x] = 1;
        int c = 0;
        for (Pair e : edges.get(x)) {
            if (was[e.x] == 0) {
                c += dfs(e.x, e.id);
            }
        }
        if (a[x] == c % 2) {
            return 0;
        } else {
            if (edgeId > 0)
                ans.add(edgeId);
            return 1;
        }
    }

    private void solve(InputReader in, PrintWriter out) {
        int n = in.nextInt();
        int m = in.nextInt();
        a = new int[n];
        int s = 0;
        int k = 0;
        for (int i = 0; i < n; i++) {
            a[i] = in.nextInt();
            if (a[i] >= 0)
                s += a[i];
            else
                k++;
        }
        if (s % 2 == 1 && k == 0) {
            out.print(-1);
            return;
        }
        for (int i = 0; i < n; i++) {
            if (a[i] == -1)
                if (s % 2 == 1) {
                    a[i] = 1;
                    s++;
                } else {
                    a[i] = 0;
                }
        }
        for (int i = 0; i < n; i++) {
            edges.add(new ArrayList<>());
        }
        for (int i = 0; i < m; i++) {
            int x = in.nextInt() - 1;
            int y = in.nextInt() - 1;
            edges.get(x).add(new Pair(y, i + 1));
            edges.get(y).add(new Pair(x, i + 1));
        }
        ans = new ArrayList<>();
        was = new int[n];
        dfs(0, -2);
        out.println(ans.size());
        for (Integer i : ans) {
            out.println(i);
        }
    }

    static class InputReader {
        BufferedReader reader;
        StringTokenizer tokenizer;
        boolean isClosed;

        InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
            isClosed = false;
        }

        String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (Exception e) {
                    isClosed = true;
                    return "0";
                }
            }
            return tokenizer.nextToken();
        }

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

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

    }

    public static void main(String[] arg) {
        try (//InputStream inputStream = new FileInputStream("file.in");
             //OutputStream outputStream = new FileOutputStream("file.out")
             InputStream inputStream = System.in;
             OutputStream outputStream = System.out;
        ) {

            InputReader in = new InputReader(inputStream);
            PrintWriter out = new PrintWriter(outputStream);
            new Main().solve(in, out);
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}