#include <cstdio> #include <cstring> #include <iostream> #include <map> #include <vector> #include <algorithm> using namespace std; const int maxn = 25; char str[111111]; int a[maxn*3],b[maxn*3],n; map<int,int> vis; struct RES{ int num; int s1,s2; RES(int x,int y,int z):num(x),s1(y),s2(z){} }; int bitcount(int x) {return x==0 ? 0:bitcount(x>>1)+(x&1);} int main() { while(scanf("%d",&n)==1){ for(int i=0;i<n;i++){ scanf("%s",str); memset(a,0,sizeof(a)); int len=strlen(str); for(int j=0;j<len;j++){ a[str[j]-'A']=(a[str[j]-'A']+1)%2; } b[i]=0; for(int j=0;j<26;j++){ b[i]+=(a[j]<<j); } } vis.clear(); int mid = n>>1; for(int i=0;i<(1<<mid);i++){ int num=0,val=0; for(int j=0;j<mid;j++) if((i>>j)&1){ num++; val^=b[j]; } if(!vis.count(val) || bitcount(vis[val]) < num) vis[val] = i; } RES res(0,0,0); int len=n-mid; for(int i=0;i<(1<<len);i++){ int num=0,val=0; for(int j=0;j<len;j++) if((i>>j)&1){ num++; val^=b[j+mid]; } if(vis.count(val)){ if(res.num < num + bitcount(vis[val])) { res=RES(num + bitcount(vis[val]),vis[val],i); } } } vector<int> ans; printf("%d\n",res.num); for(int i=0;i<mid;i++) if((res.s1>>i)&1) {ans.push_back(i+1); } for(int i=0;i<len;i++) if((res.s2>>i)&1) ans.push_back(i+1+mid); sort(ans.begin(),ans.end()); for(int i=0;i<ans.size();i++) { if(i) printf(" "); printf("%d",ans[i]); } printf("\n"); } return 0; }