#include<stdio.h>
#include<stdlib.h>
typedef struct {
    int taskID;
    int priority;
} Task;
typedef struct{
    Task*tasks;
    int size;
    int capacity;
}MinHeap;
MinHeap* createMinHeap(int capacity){
    MinHeap* heap=(MinHeap*)malloc(sizeof(MinHeap));
    heap->capacity=capacity;
    heap->size=0;
    heap->tasks=(Task*)malloc(capacity*sizeof(Task));
    return heap;
}
void swap(Task*a,Task*b){
    Task temp = *a;
    *a = *b;
    *b = temp;
}
void insert(MinHeap*heap,int taskID,int priority){
    if(taskID < 0 || priority < 0) {
        printf("Invalid Input\n");
        return;
    }
    if(heap->size >= heap->capacity){
        printf("Heap Full\n");
        return;
    }
    heap->tasks[heap->size].taskID = taskID;
    heap->task[heap->size].priority = priority;
    int current = heap->size++;
    while(current!=0 && heap->tasks[current].priority < heap->tasks[(current-1)/2].priority)
        swap(&heap->tasks[current],&heap->tasks[(current-1)/2]);
        current = (current-1)/2;
}
printf("Task Added: %d\n",taskID);
}
Task extractMin(MinHeap*heap){
    if(heap->size==0){
        Task t={-1,-1};
        return t;
}
Task root = heap->tasks[0];
if(heap->size > 1){
    heap->tasks[0]=heap->tasks[--heap->size];
    int current = 0;
    while (current<heap->size){
        int left=current*2+1;
        int right=current*2+2;
        if(left >= heap->size)break;
        int smallest=left;
        if(right<heap->size&&heap->tasks[right].priority<heap->tasks[left].priority){
            smallest=right;
        }
    } else {
        heap->size;
    }
    return root;
    int main(){
        int n;
        scanf("%d",&n);
        MinHeap*heap=createMinHeap(n);
        for(int i = 0;i < n;i++){
            int taskID,priority;
            scanf("%d%d",&taskID,&priority);
            insert(heap,taskID,priority);
        }
        Task highestpriorityTask=extractMin(heap);
        if(highestpriorityTask.taskID!=1){
         printf("Task with Highest priority: %d\n",highestpriorityTask,taskID);
        } else {
            printf("No valid tasks available.\n");
        } 
        return 0;
    }
}