#include <stdlib.h>

	static struct node
	{ int key; struct node *next; };
	static struct node *heada, *za, *ta;
	static struct node *headb, *zb, *tb;

void stackpairinit_();
void stackpairinit();
        void stackpairinit_() {stackpairinit();}
	void stackpairinit () 
	   {
	     heada = (struct node *) malloc(sizeof *heada);
	     za = (struct node *) malloc(sizeof *za);
	     heada->next = za; heada->key=0;
	     za->next = za;
	     za->key = 0;

	     headb = (struct node *) malloc(sizeof *headb);
	     zb = (struct node *) malloc(sizeof *zb);
	     headb->next = zb; headb->key=0;
	     zb->next = zb;
	     zb->key = 0;
	   }

void stackpairflush_();
void stackpairflush();
        void stackpairflush_() {stackpairflush();}
	void stackpairflush () 
	   {
             free(heada);
             free(headb);
             free(za);
             free(zb);
	   }

void pushpair_();
void pushpair();
        void pushpair_(pa, pb)  int *pa; int *pb; {pushpair(pa, pb);}
	void pushpair (pa, pb)
             int *pa;
             int *pb;
	   {
	     int va;
	     int vb;
	     va = *pa;
	     ta = (struct node *) malloc(sizeof *ta);	
	     ta->key = va; ta->next = heada->next;	
	     heada->next =ta;	

	     vb = *pb;
	     tb = (struct node *) malloc(sizeof *tb);	
	     tb->key = vb; tb->next = headb->next;	
	     headb->next =tb;	
	   }

void poppair_();
void poppair();
        void poppair_(xa,xb)  int *xa; int *xb; {poppair(xa,xb);}
	void poppair (xa,xb)
             int *xa;
             int *xb;
	   {
	     ta = heada->next; heada->next = ta->next;
	     *xa = ta->key;
	     free(ta);
	     tb = headb->next; headb->next = tb->next;
	     *xb = tb->key;
	     free(tb);
	   }

void stackpairempty_();
void stackpairempty();

        void stackpairempty_(i) int *i; {stackpairempty(i);}
	void stackpairempty (i)
            int *i;
	  { 
	    *i = 0;
            if(heada->next == za) *i = 1;
          }