/*
Next Greater Element
*/
#include<iostream>
# define maxsize 100
using namespace std;
struct stack{
int top;
int items[maxsize];
};
//function to push an element in satck
void push(struct stack *s,int x){
if(s->top==maxsize-1)
{
cout<<"stack overflow "<<endl;
return;
}
else{
s->top=s->top+1;
//int top=s->top;
s->items[s->top]=x;
}
}
//function to check if satck is empty
bool chkEmpty(struct stack *s){
if(s->top==-1)
return true;
else
return false;
}
//function to pop from stack
int pop(struct stack *s){
if(s->top==-1)
{
cout<<"stack is empty "<<endl;
return -1;
}
else{
int top=s->top;
int temp=s->items[top];
s->top--;
return temp;
}
}
//function to print next greatest element
void printNextGreatest(int A[],int n){
struct stack s;
int i,element,next;
s.top=-1;
//pushing 1st elment in stack
push(&s,A[0]);
for(i=1;i<n;i++){
next=A[i];
if(chkEmpty(&s)==false){
//cout<<"Not empty "<<endl;
element=pop(&s);
//cout<<"Elemet is "<<element<<endl;
//cout<<"Next is "<<next<<endl;
while(element<next){
cout<<"Next Greater element of "<<element<<" is "<<next<<endl;
if(chkEmpty(&s))
break;
else {
element=pop(&s);
//cout<<"Element poped is "<<element<<endl;;
}
}
if(element>next)
push(&s,next);
}
push(&s,next);
}
while(chkEmpty(&s)==false){
element=pop(&s);
next=-1;
//cout<<"Next Greater element of "<<element<<" is "<<next<<endl;
}
}
int main()
{
int n;
cin>>n;
int A[n];
int i;
for(i=0;i<n;i++)
cin>>A[i];
printNextGreatest(A,n);
}
LyoKTmV4dCBHcmVhdGVyIEVsZW1lbnQKCgoqLwojaW5jbHVkZTxpb3N0cmVhbT4KIyBkZWZpbmUgbWF4c2l6ZSAxMDAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RydWN0IHN0YWNrewoJaW50IHRvcDsKCWludCBpdGVtc1ttYXhzaXplXTsKfTsKLy9mdW5jdGlvbiB0byBwdXNoIGFuIGVsZW1lbnQgaW4gc2F0Y2sKdm9pZCBwdXNoKHN0cnVjdCBzdGFjayAqcyxpbnQgeCl7CglpZihzLT50b3A9PW1heHNpemUtMSkKCXsKCQljb3V0PDwic3RhY2sgb3ZlcmZsb3cgIjw8ZW5kbDsKCQlyZXR1cm47Cgl9CgllbHNlewoJCXMtPnRvcD1zLT50b3ArMTsKCQkvL2ludCB0b3A9cy0+dG9wOwoJCXMtPml0ZW1zW3MtPnRvcF09eDsKCX0KfQovL2Z1bmN0aW9uIHRvIGNoZWNrIGlmIHNhdGNrIGlzIGVtcHR5CmJvb2wgY2hrRW1wdHkoc3RydWN0IHN0YWNrICpzKXsKCWlmKHMtPnRvcD09LTEpCglyZXR1cm4gdHJ1ZTsKCWVsc2UKCXJldHVybiBmYWxzZTsKfQovL2Z1bmN0aW9uIHRvIHBvcCBmcm9tIHN0YWNrCmludCBwb3Aoc3RydWN0IHN0YWNrICpzKXsKCWlmKHMtPnRvcD09LTEpCgl7CgkJY291dDw8InN0YWNrIGlzIGVtcHR5ICI8PGVuZGw7CgkJcmV0dXJuIC0xOwoJfQoJZWxzZXsKCQlpbnQgdG9wPXMtPnRvcDsKCQlpbnQgdGVtcD1zLT5pdGVtc1t0b3BdOwoJCXMtPnRvcC0tOwoJCXJldHVybiB0ZW1wOwoJfQp9Ci8vZnVuY3Rpb24gdG8gcHJpbnQgbmV4dCBncmVhdGVzdCBlbGVtZW50CnZvaWQgcHJpbnROZXh0R3JlYXRlc3QoaW50IEFbXSxpbnQgbil7CglzdHJ1Y3Qgc3RhY2sgczsKCWludCBpLGVsZW1lbnQsbmV4dDsKCXMudG9wPS0xOwoJLy9wdXNoaW5nIDFzdCBlbG1lbnQgaW4gc3RhY2sKCXB1c2goJnMsQVswXSk7CgkKCWZvcihpPTE7aTxuO2krKyl7CgkJbmV4dD1BW2ldOwoJCQlpZihjaGtFbXB0eSgmcyk9PWZhbHNlKXsKCQkJCS8vY291dDw8Ik5vdCBlbXB0eSAiPDxlbmRsOwoJCQllbGVtZW50PXBvcCgmcyk7CgkJCS8vY291dDw8IkVsZW1ldCBpcyAiPDxlbGVtZW50PDxlbmRsOwoJCQkvL2NvdXQ8PCJOZXh0IGlzICI8PG5leHQ8PGVuZGw7CgkJCXdoaWxlKGVsZW1lbnQ8bmV4dCl7CgkJCQljb3V0PDwiTmV4dCBHcmVhdGVyIGVsZW1lbnQgb2YgIjw8ZWxlbWVudDw8IiBpcyAiPDxuZXh0PDxlbmRsOwoJCQkJaWYoY2hrRW1wdHkoJnMpKQoJCQkJCWJyZWFrOwoJCQkJZWxzZSB7CgkJCQkJZWxlbWVudD1wb3AoJnMpOyAKCQkJCQkvL2NvdXQ8PCJFbGVtZW50IHBvcGVkIGlzICI8PGVsZW1lbnQ8PGVuZGw7OwoJCQkJCX0KCQkJfQoJCQlpZihlbGVtZW50Pm5leHQpCgkJCXB1c2goJnMsbmV4dCk7CgkJfQoJCXB1c2goJnMsbmV4dCk7Cgl9Cgl3aGlsZShjaGtFbXB0eSgmcyk9PWZhbHNlKXsKCQllbGVtZW50PXBvcCgmcyk7CgkJbmV4dD0tMTsKCQkvL2NvdXQ8PCJOZXh0IEdyZWF0ZXIgZWxlbWVudCBvZiAiPDxlbGVtZW50PDwiIGlzICI8PG5leHQ8PGVuZGw7Cgl9CgkKCQp9CmludCBtYWluKCkKewoJaW50IG47CgljaW4+Pm47CglpbnQgQVtuXTsKCWludCBpOwoJZm9yKGk9MDtpPG47aSsrKQoJY2luPj5BW2ldOwoJcHJpbnROZXh0R3JlYXRlc3QoQSxuKTsKCQp9Cg==