#include<stdio.h>
typedef struct{
    int ID;
    int priority;
}Task;
Task heap[1005];
int heapSize = 0;
void swap(Task*a,Task*b){
    Task temp= *a;
    *a=*b;
    *b=temp;
}
void heapInsert(int ID,int priority)
{
    heapSize++;
    heap[heapSize].ID=ID;
    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 s1[20],s2[20];
    for(int i=0;i<n;i++){
        scanf("%s%s",s1,s2);
        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;
}