显示代码纯文本
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
const int MAXN=1010;
int N;
long long num[MAXN];
bool f[MAXN]={};
int ans[MAXN],len=0;
int temp=0;
void dfs(int k){///顺序 有影响
if(!temp&&k){
cout<<len<<endl;
for(int i=1; i<=len; i++)printf("%d ",ans[i]);
exit(0);
}
if(k>=N)return;
for(int i=1; i<=N; i++){
if(!f[i]){
f[i]=1;
temp=temp^num[i];
ans[++len]=i;
dfs(k+1);
temp=temp^num[i];
len--;
f[i]=0;
}
}
}
void dfs2(int k){//顺序 无影响
if(!temp&&len){
cout<<len<<endl;
for(int i=1; i<=len; i++)
printf("%d ",ans[i]);
exit(0);
}
if(k>=N)return;
temp=temp^num[k+1];
ans[++len]=k+1;
dfs2(k+1);
temp=temp^num[k+1];
len--;
dfs2(k+1);
}
int main(){
freopen("asm_contribute.in","r",stdin);
freopen("asm_contribute.out","w",stdout);
cin>>N;
for(int i=1; i<=N; i++)
//cin>>num[i];
scanf("%lld",&num[i]);
for(int i=1; i<N; i++)
for(int j=i+1; j<=N; j++)
if(num[i]==num[j]){
cout<<'2'<<endl<<i<<' '<<j<<endl;
return 0;
}
dfs2(0);
fclose(stdin);
fclose(stdout);
return 0;
}
/*
//实验 XOR ^
int a[5]={0,1,2,3,5};
for(int i=1; i<=4; i++){
num[0]=num[0]^num[a[i] ];
cout<<num[0]<<' ';
}
cout<<endl;
for(int i=2; i<=4; i++){
num[1]=num[1]^num[a[i] ];
cout<<num[1]<<' ';
}
cout<<endl<<num[1]<<endl;
//cout<<num[1]^num[2]^num[3]^num[5]<<endl;
1.递归
void (){
if()
for(){///顺序 有影响
a++;
void
a--;
}
}
void (){//顺序 无影响
if()
a++;
void()
a--;
void()
}
2.long long
*/