#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#define MAX 1000
typedef struct{
    int taskID;
    int priority;
}Task;
Task heap[MAX];
int heapSize = 0;
void swap(Task*a,Task*b){
    Task temp= *a;
    *a=*b;
    *b=temp;
}
void heapInsert(int taskID,int priority)
{
    heapSize++;
    heap[heapSize].taskID=taskID;
    heap[heapSize].priority=priority;
    int i =heapSize;
    while(i>1 && heap[i].priority<heap[i/2].priority){
        swap(&heap[i],&heap[i/2]);
        i=i/2;
    }
}
Task getMin(){
    return heap[1];
}
int isInteger(char *s){
    int i =0;
    if(s[i]=='-' || s[i]=='+')
    i++;
    if(!isdigit(s[i]))
    return 0;
    for(; s[i];i++)
    if(!isdigit(s[i]))
    return 0;
    return 1;
}
int main(){
    int n;
    scanf("%d",&n);
    char a[20],b[20];
    for(int i=0;i<n;i++){
        scanf("%s%s",a,b);
        if(!isInteger(s1) || !isInteger(s2)){
            printf("Invalid Input");
            continue;
        }
        int taskID = atoi(s1);
        int priority = atoi(s2);
        if(priority < 0){
            printf("Invalid Input");
            continue;
        }
        heapInsert(taskID,priority);
        printf("Task Added:%d\n",taskID);
    }
    if(heapSize > 0){
        Task t = getMin();
        printf("Task with Highest Priority:%d\n",t.taskID);
    }
    return 0;
}