#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define MAX 1000

// Doubly linked list node
typedef struct Node {
    int data;
    struct Node* prev;
    struct Node* next;
} Node;

// Function to create a new node
Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->prev = NULL;
    newNode->next = NULL;
    return newNode;
}

// Insert at end
void insertEnd(Node** head, Node** tail, int data) {
    Node* newNode = createNode(data);
    if (*head == NULL) {
        *head = *tail = newNode;
    } else {
        (*tail)->next = newNode;
        newNode->prev = *tail;
        *tail = newNode;
    }
}

// Swap two node values
void swap(Node* a, Node* b) {
    int tmp = a->data;
    a->data = b->data;
    b->data = tmp;
}

// Manual descending sort
void sortDescending(Node* head) {
    for (Node* i = head; i != NULL; i = i->next) {
        for (Node* j = i->next; j != NULL; j = j->next) {
            if (i->data < j->data) {
                swap(i, j);
            }
        }
    }
}

// Remove middle node
void removeMiddle(Node** head, Node** tail, int size) {
    if (size == 0) return;

    int mid = size / 2;

    Node* temp = *head;
    for (int i = 0; i < mid; i++) {
        temp = temp->next;
    }

    if (temp->prev) temp->prev->next = temp->next;
    else *head = temp->next;

    if (temp->next) temp->next->prev = temp->prev;
    else *tail = temp->prev;

    free(temp);
}

// Validate input string is a positive integer
int isValidNumber(char* str) {
    for (int i = 0; str[i]; i++) {
        if (!isdigit(str[i])) return 0;
    }
    return 1;
}

// Print list
void printList(Node* head) {
    if (!head) {
        printf("List is empt