// Original C++ solution (slower):
#include<bits/stdc++.h>

#include <ext/pb_ds/assoc_container.hpp>

#include <ext/pb_ds/tree_policy.hpp>

using namespace __gnu_pbds;

using namespace std;

#define Khela ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

#define ll long long int

#define llu long long unsigned int

#define pf printf

#define sf scanf

#define f first

#define s second

#define pb push_back

#define mk make_pair

#define pii pair<int ,int>

#define PII pair<ll ,ll>

 

int dx8[] = {0, 0, 1, 1, 1, -1, -1, -1};

int dy8[] = {1,-1, 1, -1, 0, 0, -1, 1};

int dx4[] = {0, 0, 1, -1};

int dy4[] = {1, -1, 0, 0};

 

typedef tree<pair<int,int>,null_type,less<pair<int,int>>,rb_tree_tag,tree_order_statistics_node_update>ordered_set;

int Set(int N,int pos){return N=N | (1<<pos);}

int reset(int N,int pos){return N= N & ~(1<<pos);}

bool check(int N,int pos){return (bool)(N & (1<<pos));}

const int max=1e9+100;

const ll  MAX=1e18+500;

const int sz=2e5+100;

int mark[sz];

vector<int> test;

int main()

{

    Khela

    int a,b,c,i,j,k,q,p,x,y,ct,ct1,m,l,r,x1,y1,mn,h,sum1,in,z,mid,n,mx;

    char ch;

    double d;

    string str1,str2,str;

    bool bl,bl1;

    int t,cs=1;

    while(cin>>n)

    {

        test.clear();

        memset(mark,0,sizeof mark);

        int ara[n+2];

        for(i=1;i<=n;i++) cin>>ara[i];



        int ct=0;

        for(i=n;i>=1;i--){

            p=mark[i];

            x=0;

            if(p%2 != ara[i]) ++x,++ct,test.pb(i);

            if(x>0){

                int sq=sqrt(i);

                for(j=1;j<=sq;j++){

                    if(i%j==0){

                        ++mark[j];

                        if(j*j != i) ++mark[i/j];

                    }

                }

            }

        }

        reverse(test.begin(),test.end());

        cout<<ct<<endl;

        if(test.size()>0){

        for(auto xx: test) cout<<xx<<" ";

        cout<<endl;

        }

      

        

    }











}

// Optimized solution to the same problem (faster):
#include <bits/stdc++.h>

using namespace std ;







int main(){

    bool v[200100] ;

    int n,z ;

    cin >> n ;

    for(int i=0 ; i<n ; i++){

        cin >> v[i] ;

    }

    for(int i=n-1 ; i>0 ; i--){

        if(v[i] == 1){

         // here

         z = i +1 ;

             for (int j=1; j<=sqrt(z); j++)

                {

                    if (z%j == 0)

                    {

                        // If divisors are equal, print only one

                        if (z/j == j)

                            //printf("%d ", i);

                            v[j-1] = -1*(v[j-1]) +1 ;



                        else {

                             v[j-1] = -1*(v[j-1]) +1 ;

                             v[(z/j)-1] = -1*(v[(z/j)-1]) +1 ;

                        }// Otherwise print both

                            //printf("%d %d ", i, n/i);

                    }

                }



          // end

          v[i] = 1 ;

        }







    }

    int ans =0 ;

    for(int i=0 ; i<n ; i++){

        if(v[i] == 1){

            ans ++ ;

        }

    }

    cout << ans << endl ;

    if(ans != 0){

        for(int i=0 ; i<n ; i++){

            if(v[i] == 1){

                cout << i+1 << " " ;

            }

        }

    }



    return 0 ;

}


// Fastest known solution for this problem: