#include <stdio.h>
#include <stdlib.h>

#define MAX 1000

typedef struct {
    int taskID;
    int priority;
} Task;

Task heap[MAX];
int size = 0;

// Swap two tasks in the heap
void swap(int i, int j) {
    Task temp = heap[i];
    heap[i] = heap[j];
    heap[j] = temp;
}

// Heapify up after insertion
void heapify_up(int index) {
    while (index > 0) {
        int parent = (index - 1) / 2;
        if (heap[parent].priority > heap[index].priority) {
            swap(parent, index);
            index = parent;
        } else {
            break;
        }
    }
}

// Insert task into min-heap
void insert(int taskID, int priority) {
    heap[size].taskID = taskID;
    heap[size].priority = priority;
    heapify_up(size);
    size++;
    printf("Task Added: %d\n", taskID);
}

// Validate if input is integer
int is_integer(const char* s) {
    int i = 0;
    if (s[0] == '-') i++; // allow negative sign
    for (; s[i]; i++) {
        if (!isdigit(s[i])) return 0;
    }
    return 1;
}

int main() {
    int n;
    // Read number of tasks
    if (scanf("%d", &n) != 1 || n <= 0) {
        printf("Invalid input\n");
        return 0;
    }

    for (int i = 0; i < n; i++) {
        int id, priority;
        // Read taskID and priority
        if (scanf("%d %d", &id, &priority) != 2 || priority < 0) {
            printf("Invalid input\n");
            // Flush the invalid line
            char ch;
            while ((ch = getchar()) != '\n' && ch != EOF);
            continue;
        }

        insert(id, priority);  // Insert into min-heap
    }

    // After all tasks are added, print task with highest priority
    if (size > 0) {
        printf("Task with Highest Priority: %d\n", heap[0].taskID);
    }

    return 0;
}