#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
typedef struct {
    int taskID;
    int priority;
} Task;
typedef struct {
    Task* heap;
    int size;
    int capacity;
} MinHeap;
MinHeap* createMinHeap(int capacity) {
    MinHeap* minheap = (MinHeap *)malloc(sizeof(MinHeap));
    minHeap->capacity = capacity;
    minHeap->size = 0;
    minHeap->heap = (Task*)malloc(capacity * sizeof(Task));
    return minHeap;
}
void swap(Task* a, Task* b) {
    Task temp = *a;
    *a = *b;
    *b = temp;
}
void minheapify(MinHeap* minHeap, int index) {
    int smallest = index;
    int left = 2 * index + 1;
    int right = 2 * index + 2;
    if (left < minHeap->size && minHeap->heap[left].priority < minHeap->heap[smallest].priority)
    smallest = left;
    if (right < minHeap->size && minHeap->heap[right].priority < minHeap->heap[smallest].priority)
    smallest = right;
    if (smallest != index) {
        swap(&minHeap->heap[index], &minHeap->heap[smallest]);
        minHeapify(minHeap, smallest);
    }
}
void insert(MinHeap* minHeap, int taskID, int priority) {
    if (taskID <= 0 || priority < 0) {
        printf("Invalid input\n");
        return;
    }
    if (minHeap->size == minHeap->capacity) {
        printf("Heap is full\n");
        return;
    }
    Task newTask;
    newTask.taskID = taskID;
    newTask.priority = priority;
    minHeap->heap[minHeap->size] = newTask;
    minHeap->size++;
    int current = MinHeap->size - 1;
    while (current > 0 && minHeap->heap[(current - 1) / 2].priority > minHeap->heap[current].priority) {
        swap(&minHeap->heap[current], &minHeap->heap[(current - 1) / 2]);
        current = (current - 1) / 2;
    }
    printf("Task Added: %d\n", taskID);
}
int getTaskWithHighestPriority(MinHeap* MinHeap) {
    if (minHeap->size == 0) {
        return -1;
    }
    return minHeap->hep[0].taskID;
}
int main() {
    int n;
    scanf("%d", &n);
    MinHeap* minHeap = createMinHeap(n);
    for (int i = 0; i < n; i++) {
        int taskID,priority;
        if (scanf("%d %d", &taskID, &priority) != 2) {
            printf("Invalid input\n");
            continue;
        }
        insert(minHeap, taskID, priority);
    }
    int highestPriorityTask = getTaskWithHighestPriority(MinHeap);
    if (highestPriorityTask != -1) {
        printf("Task with Highest Priority: %d\n", highestPriorityTask);
    }
    free(minHeap->heap);
    free(minHeap);
    return 0;
}