#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
typedef struct {
    int taskID;
    int priority;
}Task;
typedef struct {
    Task*data;
    int size;
    int capacity;
}MinHeap;
MinHeap*createHeap(int capacity);
void insertTask(MinHeap*heap,int id,int priority);
Task extraMin(MinHeap*heap);
void heaifyup(MinHeap*heap,int index);
void heapifyDown(MinHeap*heap,int index);
MinHeap*createHeap(int capacity){
    MinHeap*heap=(MinHeap*)malloc(sizeof(MinHeap));
    heap->data=(Task*)malloc(sizeof(Task)*(capacity+1));
    heap->size=0;
    heap->capacity=capacity;
    return heap;
}
void swap(Task*a,Task*b){
    Task temp=*a;
    *a=*b;
    *b=temp;
}
void insertTask(MinHeap*heap,int id,int priority){
    heap->size++;
    heap->data[heap->size],TaskID=id;
    heapifyUp(heap,heap->size);
}
void heapifyup(MinHeap*heap,int index){
    while (index>1 && heap->data[index].priority<heap->data[index/2].priority){
        swap(&heap->data[index],&heap->data[index/2]);
        index/=2;
    }
}
Task extractMin(MinHeap*heap){
    Task min=heap->data[1];
    heap->data[1]=heap->data[heap->size];
    heap->size--;
    heapifyDown(heap,1);
    return min;
}
void heapifyDown(MinHeap*heap,int index){
    int smallest=index;
    int left=2*index;
    int right=2*index+1;
    if(left<=heap->size && heap->data[left].priority<heap->data[smallest].priority)
    smallest=left;
    if(right<=heap->size&&heap->data[right].priority<heap->data[smallest].priority)
    smallest=right;
    if(smallest !=index){
        swap(&heap->data[index],&heap->data[smallest]);
        heapifyDown(heap,smallest);
    }
}
int main(){
    int n;
    scanf("%d",&n);
    MinHeap*heap=createHeap(n);
    for(int i=0;i<n;i++){
        int id,priority;
        char line[100];
        scanf("%[^\n]",line);
        if(sscanf(line,"%d%d",&id,&priority)!=2||id<0||priority<0){
            printf("Invalid input\n");
            continue;
        }
        insertTask(heap,id,priority);
        printf("Task Added:%d\n",id);
    }
    if(heap->size==0){
        printf("no valid tasks available\n");
    }else{
        Task top=extractMin(heap);
        printf("Task with Highest Priority:%d\n",top.taskID);
    }
    free(heap->data);
    free(heap);
    return 0;
}
    
    }
}
    }
}
}
}