#include<stdio.h>
#include<stdlib.h>
struct elemento{
        int info;
        struct elemento * next;
};
typedef struct elemento Elemento; 
typedef Elemento* Lista;
void Testa(Lista *lis, int v); 
void Coda(Lista *lis, int v);
void CancellaModulo(Lista *lis, int val);
void Stampa(Lista lis); 
int main() {
	int v=1; 
	Lista lis=NULL;
	while(v!=0) {
		scanf("%d", &v);
		if(v>0 && v%2==0) {
			Testa(&lis, v); 
		}
		if(v>0 && v%2!=0) {
			Coda(&lis, v); 
		}
		if(v<0) {
			CancellaModulo(&lis, -v);
		}
	}
	Stampa(lis);
	return 0;
}
void Testa(Lista *lis, int v) { 
	Lista aux; 
	aux=(Lista)malloc(sizeof(Elemento)); 
	aux->info=v; 
	aux->next=*lis;
	*lis=aux;
}
void Stampa(Lista lis) { 
	if(lis!=NULL) { 
		printf("%d\n", lis->info);
		Stampa(lis->next);
	}
}
void Coda(Lista *lis, int v) { 
	Lista ultimo; 
	Lista aux;
	aux = malloc(sizeof(Elemento)); aux->info = v;
	aux->next = NULL;
	if (*lis == NULL) *lis = aux; 
	else {
		ultimo = *lis;
		while (ultimo->next != NULL) ultimo = ultimo->next;
		ultimo->next = aux;
	} 
}


void CancellaModulo(Lista *lis, int val) { 
	if ( (*lis) !=NULL) {
		if ( (*lis)->info==val) {
			Lista aux;
			aux=*lis; 
			*lis=(*lis)->next;
			free(aux);
      		}
	else CancellaModulo(&((*lis)->next),val); //ripete la procedura finché non trova -v o finché non termina la lista
	}
}
