#include <bits/stdc++.h>
#define SZ(X) ((int)(X).size())
#define ALL(X) (X).begin(), (X).end()
#define REP(I, N) for (int I = 0; I < (N); ++I)
#define REPP(I, A, B) for (int I = (A); I < (B); ++I)
#define RI(X) scanf("%d", &(X))
#define RII(X, Y) scanf("%d%d", &(X), &(Y))
#define RIII(X, Y, Z) scanf("%d%d%d", &(X), &(Y), &(Z))
#define DRI(X) int (X); scanf("%d", &X)
#define DRII(X, Y) int X, Y; scanf("%d%d", &X, &Y)
#define DRIII(X, Y, Z) int X, Y, Z; scanf("%d%d%d", &X, &Y, &Z)
#define RS(X) scanf("%s", (X))
#define CASET int ___T, case_n = 1; scanf("%d ", &___T); while (___T-- > 0)
#define MP make_pair
#define PB push_back
#define MS0(X) memset((X), 0, sizeof((X)))
#define MS1(X) memset((X), -1, sizeof((X)))
#define LEN(X) strlen(X)
#define F first
#define S second
typedef long long LL;
using namespace std;
const int SIZE = 100000;
int used[1<<20],tt;
char s[SIZE];
int main(){
int n;
FILE *fp = fopen("input.in","r");
fgets(s,SIZE,fp);
n=atoi(s);
do{
for(int i=0;s[i]!='\n'&&s[i];i++){
if(s[i]!=' ' && (s[i] < '0' || s[i] > '9')){
fprintf(stderr,"your input is so strange.");
return 0;
}
}
}while(fgets(s,SIZE,fp));
fclose(fp);
if((n&(n-1)) || n <= 1 || n > (1<<20)){
fprintf(stderr,"n should be power of 2 and large than 1 and smaller than 2^20.\n");
return 0;
}
// in i-th pass(0 base), we only consider numbers belong some masks of lowest i+1 bits
set<int>consider;
consider.insert(0);
consider.insert(1);
//pass log_n time
for(int i=0;(1<<i)<n;i++){
fp=fopen("input.in","r");
fscanf(fp,"%*d");
int mask=(1<<(i+1))-1;
int x;
map<int,int>num;
map<int,int>xr;
//read all numbers
tt++;
while(fscanf(fp,"%d",&x) == 1 && consider.size() != 0){
if(x<0||x>=n){
fprintf(stderr,"all number should be between 0 and n-1, inclusive.\n");
return 0;
}
if(used[x]==tt){
fprintf(stderr,"the input cannot contain repeat numbers.");
return 0;
}
used[x]=tt;
int cat=x&mask;
if(consider.count(cat)){
xr[cat]^=x; //calculate xor of all number belong this mask category
num[cat]++; //calculate numbers of number belong this mask category
}
}
int desired_number=1<<(n-i-1);
set<int>nxt;
for(set<int>::iterator it=consider.begin();it!=consider.end();it++){
int cat = *it;
if(num[cat] == 0){ // if this mask category contains no number, print all
for(int number=cat;number<n;number+=1<<(i+1))printf("%d\n",number);
}
else if(desired_number == num[cat]+1){ // if this mask category miss exact one number, print it
int res=xr[cat];
for(int number=cat;number<n;number+=1<<(i+1))res^=number;
printf("%d\n",res);
}
else if(num[cat] < desired_number){ // otherwise, it become two mask category in next pass
nxt.insert(cat);
nxt.insert(cat|(1<<(i+1)));
}
}
consider=nxt;
fclose(fp);
}
return 0;
}
/*
* in any time of process, the number of mask categories will no more than O(k), so the Space Complexity is O(k)
*/