//一个数组中有两种数出现了奇数次
//其他数出现了偶数次
#include<bits/stdc++.h>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+5;
int main(){
int x[] = {1,1,3,5,3,5,2,4,2,2};
int n = sizeof(x) / sizeof(*x);
int ab=0;
//1.第一次异或,求得 a^b
for(int i = 0;i < n;i++)
ab ^= x[i];
//cout << ab << endl;
//2.第二次异或
//1)首先找到a^b的最右边的1,保留1开始的二进制位
//10110010 保留 t = 10 (/101 010 011/ 11000 00111 + 1 = 01000)
int t = ab & (~ab + 1);
//cout << t <<endl;
//2)异或时,只要这个数与t按位与为t,异或起来就得到了
//a和b的其中1个数a
int a=0;
for(int i = 0;i < n;i++){
if((x[i] & t) == t){ //错在优先级
a^=x[i];
}
}
//3.第三次异或,y =a^b^a;
int b = ab ^ a;
cout<<a<<" "<<b<<endl;
return 0;
}