#include <stdio.h>
#include <stdlib.h>

struct part {
    int value;
	struct part* next;
};

struct part* tail;
int count;

void initialze() {
	tail = NULL;
	count = 0;
}

void enterq(int val) {
	struct part* p;
	p = malloc(sizeof(struct part));
	p->value = val;
	if (tail == NULL) {
		tail = p;
		tail->next = p;
	} else {
		p->next = tail->next;
		tail->next = p;
		tail = p;
	}
	count++;
}

int removeq(void) {
	int val;
	struct part* p;
	if (tail == NULL) {
		printf("Queue empty\n");
		return -1;
	} else {
		p = tail->next;
		if (p == tail) {
			tail = NULL;
		} else {
			tail->next = p->next;
		}
		val = p->value;
		free(p);
		count--;
		return val;
	}
}

void display() {
	struct part* p;
	p = tail;
	if (p != NULL) {
		do {
			p = p->next;
			printf("\n%d\n", p->value);
		} while (p != tail);
	}
}

int main(void) {
	int mode, id;
	initialze();
	mode = 1;
	while (mode) {
		printf("queue process ? enter(1) or  remove(0) =");
		scanf("%d", &mode);
		if (mode == 1) {
			printf("? id = ");
			scanf("%d", &id);
			enterq(id);
		} else if (mode == 0) {
			id = removeq();
			if (id > 0)
				printf("id = %d was removed\n", id);
		}
		display();
		printf("?continue(1) or quit(0) = ");
		scanf("%d", &mode);
	}
	return 0;
}