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


typedef struct _stack
    {
        
        struct _stack* prev;
        struct _stack* next;
        int value;
        
    } 
    stack; 

void push( int data );
void pop(void);
stack *temp = NULL;
stack *first = NULL;
stack *real_first = NULL;


int main(void)
{
    

    push(22);
    push(32);
    push(42);
    push(52);
    push(4);
    push(15);
    push(3453);
    pop();
    pop();
   
    temp = real_first;
    
    while (true)
    {   
        if (temp == NULL)
            break;
        
        printf("%i ", temp ->value);
        temp  = temp->next;
       
    }
    
    temp = real_first;
    
     while (temp != NULL)
    {   
        real_first = real_first->next;
        free(temp);
        temp  = real_first;
       
    }
    
    
    printf("\n");
    return 0;
}





void push( int data)
{
    stack *newptr =  malloc(sizeof(stack));
    if (newptr == NULL)
    {
        return;
    }
    
    newptr->value = data;
    
    newptr->prev = NULL;
    
    newptr->next = NULL;
    if (first == NULL)
    {
        first = newptr;

        real_first = first;
        
    }
    
    else
    {   
        
        newptr->prev = first;
        
        first->next = newptr;
    
        first = newptr;
        
    }
    
    return;  
}
    

void pop(void)
{   
    
    
    if ( real_first == NULL || first == NULL)
        return;
    
    else if (real_first->next == NULL )
    {   
        
        
        free( real_first);
        real_first = NULL;
        
        return;
    }
    else
    {
        

    real_first = real_first->next; 
    free(real_first->prev);
    real_first->prev = NULL;
    }
    
}