#include<stdio.h>
#include<stdlib.h>
typedef struct node lea;
struct node {
int left;
int right;};
typedef struct queue* que;
que Newque(void);voidList(lea le[], int r, que qu);
struct queue {
int* data;
int rear;
int front;};
int Readlea(lea le[]);
int main(){
lea le[10];
int r =Readlea(le);
que qu =Newque();List(le, r, qu);return0;}
int Readlea(lea le[]){
int N, i, check[10]={0};
char temp, tl, tr;scanf("%d",&N);if(N){for(i =0; i <N; i++){
temp =getchar();scanf("%c %c",&tl,&tr);if(tl !='-'){
le[i].left = tl -'0';
check[le[i].left]=1;}else le[i].left =-1;if(tr !='-'){
le[i].right = tr -'0';
check[le[i].right]=1;}else le[i].right =-1;}for(i =0; i <N; i++){if(!check[i])break;}return i;}elsereturn-1;}
que Newque(void){
que new=(que)malloc(sizeof(struct queue));new->data =(int *)malloc(10*sizeof(int));new->front =-1;new->rear =-1;returnnew;}voidList(lea le[], int r, que qu){if(r ==-1)return;
int flag =1, i;
qu->data[++qu->rear]= r;while(qu->front!=qu->rear){
r = qu->data[qu->front+1];if(le[r].left !=-1|| le[r].right !=-1){if(le[r].left !=-1) qu->data[++qu->rear]=le[r].left;if(le[r].right !=-1) qu->data[++qu->rear]= le[r].right;
qu->front++;}else{if(flag) flag =0;elseprintf(" ");printf("%d", r);
qu->front++;}}}