fun main(args : Array<String>) {
    val N = readLine()!!.toInt()
    var a = readLine()!!.split(" ").map { it.toInt() }.toIntArray()
    val b = IntArray(N)

    /*
    (0 until (2.shl(N))).forEach {bit ->
        val c = IntArray(N)
        c.fill(0)

        (0 until N).forEach {
            c[it] = bit.shr(it).and(1)
        }

        var isCorrect = true
        (1..N).forEach {
            var sum = 0
            (it - 1 until N).step(it).forEach {
                sum += c[it]
            }
            if (sum.mod(2) != a[it - 1]) {
                isCorrect = false
            }
        }
        if (isCorrect) {
            actual = c.clone()
        }
    }
    */



    b.fill(0)
    // O(N)
    var wrong = false
    (N - 1 downTo 0).forEach {
        // O(N^0.5)
        val n = it + 1
        // Fix bi
        b[it] += a[it]
        b[it] %= 2

        // Update others (diviors exept self)
        for (i in 1..(Math.sqrt(n.toDouble())).toInt()) {
            if (n % i == 0) {
                if (i != n) {
                    b[i - 1] = (b[i - 1] + b[it]).mod(2)
                }
                if (i != n / i&& n/i != n) {
                    b[n/i - 1] = (b[n/i - 1] + b[it]).mod(2)
                }
            }
        }
    }

    val ans = b.mapIndexed { index, i -> if (i == 1) index + 1 else - 1 }.filter { it != -1 }
    println(ans.size)
    ans.forEach {
        print(it)
        print(' ')
    }
}