#include <stdio.h>

#define MAX_SIZE 100

int stack[MAX_SIZE];
int top_index = -1;

int is_empty() {
    return top_index == -1;
}

int is_full() {
    return top_index == MAX_SIZE - 1;
}

void push(int value) {
    if (is_full()) {
        printf("Stack overflow!\n");
        return;
    }
    stack[++top_index] = value;
}

void pop() {
    if (is_empty()) {
        printf("Stack underflow!\n");
        return;
    }
    top_index--;
}

int top() {
    if (is_empty()) {
        printf("Stack is empty!\n");
        return -1;
    }
    return stack[top_index];
}

int main() {
    push(10);
    push(20);
    push(30);

    printf("Top element: %d\n", top());
    pop();
    printf("After pop, top: %d\n", top());
    printf("Is empty: %d\n", is_empty());

    return 0;
}
