#include <iostream>

using namespace std;

bool findTwoNumsAppearOnce(int *nArray, int n, int &num1, int &num2) {

  if(nArray==NULL || n<2 || (n&1))
    return false;

  int resultXOR = 0;
  for(int i=0; i<n; i++)
    resultXOR ^= nArray[i];

  int pos = 0;
  int shiftedBit = 0;
  while(((resultXOR&1)==0) && (shiftedBit<32)) {
    resultXOR = resultXOR>>1;

    shiftedBit++;
    pos++;
  }

  if(shiftedBit==32)
    return false;

  num1 = 0;
  num2 = 0;
  for(int i=0; i<n; i++) {
    if((nArray[i]>>pos)&1)
      num1 ^= nArray[i];
    else
      num2 ^= nArray[i];
  }

  return true;
}


int main(int argc, char **argv) {

  int array[] = {1,1,2,2,3,10};

  int num1 = -1, num2 = -1;
  if(findTwoNumsAppearOnce(array, 6, num1, num2)) {
    cout << "num1: " << num1 << "; num2: " << num2 << endl;
  } else {
    cout << "Failed" << endl;
  }

  int array2[] = {1,1,2,2,13};
  int result = 0;
  for(int i=0;i<5;i++)
    result ^= array2[i];
  cout << result << endl;
    
  return 0;
}
