Find the greater element

Why this code is failing one test case?

#include<bits/stdc++.h>
using namespace std;

int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
stack s;
s.push(a[0]);
for(int i=1;i<n;i++){

while(!s.empty()&&s.top()<a[i]){
cout<<a[i]<<" ";
s.pop();
}
s.push(a[i]);
}
while(!s.empty())
{
cout<<-1<<" ";
s.pop();
}
return 0;

}

the logic that u r applying will work only for linear array.

here in this problem u r given a circular array that why one test case is failing.

for example->
3
3 2 1
output should be
-1 3 3