Problem:
Score : 400 points

Problem Statement

There are N empty boxes arranged in a row from left to right.
The integer i is written on the i-th box from the left (1 \leq i \leq N).

For each of these boxes, Snuke can choose either to put a ball in it or to put nothing in it.

We say a set of choices to put a ball or not in the boxes is good when the following condition is satisfied:

For every integer i between 1 and N (inclusive), the total number of balls contained in the boxes with multiples of i written on them is congruent to a_i modulo 2.

Does there exist a good set of choices? If the answer is yes, find one good set of choices.

Constraints

All values in input are integers.

1 \leq N \leq 2 \times 10^5

a_i is 0 or 1.

Input

Input is given from Standard Input in the following format:

N
a_1 a_2 ... a_N

Output

If a good set of choices does not exist, print -1.

If a good set of choices exists, print one such set of choices in the following format:

M
b_1 b_2 ... b_M

where M denotes the number of boxes that will contain a ball, and b_1,\ b_2,\ ...,\ b_M are the integers written on these boxes, in any order.

Sample Input 1

3
1 0 0

Sample Output 1

1
1

Consider putting a ball only in the box with 1 written on it.

There are three boxes with multiples of 1 written on them: the boxes with 1, 2, and 3. The total number of balls contained in these boxes is 1.

There is only one box with a multiple of 2 written on it: the box with 2. The total number of balls contained in these boxes is 0.

There is only one box with a multiple of 3 written on it: the box with 3. The total number of balls contained in these boxes is 0.

Thus, the condition is satisfied, so this set of choices is good.

Sample Input 2

5
0 0 0 0 0

Sample Output 2

0

Putting nothing in the boxes can be a good set of choices.

Solution in Ruby (2.3.3) (judge verdict: Time Limit Exceeded)

class MyLib
  # 素因数分解
  def prime_factorization(num, result = [])
    return [] if num < 1
    return [1] if num==1

    divides = false
    to = Math.sqrt(num).floor
    (2..to).each_with_index do |item, i|
      if num % item == 0
        result << item
        prime_factorization(num / item, result)
        divides = true
        break
      end
    end
    # 何も割れないなら、その数を入れる
    result << num unless divides
    return result
  end

  # 素因数分解ハッシュ形式
  # (例)100なら{2=>2,5=>2}
  def prime_factorization_hash(num)
    arr = prime_factorization(num)
    result = Hash.new(0)
    arr.each do |item|
      result[item] += 1
    end
    result
  end

  # 約数
  # TODO 全体的に変数名が微妙
  def divisors(num)
    pf = prime_factorization_hash(num)
    arrs = []

    # 0乗、1乗・・・した値を入れる
    pf.each_pair do |key, value|
      baisu = []
      (0..value).each do |kai|
        baisu << key**kai
      end

      arrs << baisu
    end

    first_array = arrs.delete_at(0)
    return first_array if arrs.size == 0

    result = first_array.product(*arrs)
    result.map do |item|
      item.inject { |sum, i| sum * i }
    end.sort
  end
end

def main
  n = gets.to_i
  a = gets.split.map(&:to_i)
  res = []
  balls = [0]*n

  a.each_with_index.reverse_each do |rem, i|
    num = i+1
    if (rem + balls[i]) % 2 == 1
      res << num
      yaku = MyLib.new.divisors(num)
      yaku.each do |item|
        balls[item-1] += 1
      end
    end
  end

  m = res.size
  puts m == 0 ? 0 : "#{m}\n#{res.sort.join(' ')}"
end

main