#include <iostream>
#include <vector>
#include <stack>
using namespace std;
vector<int> in, gl;
stack<int> s;
void find_next_greater(void);
int main()
{
find_next_greater();
for ( int i = 0; i < gl.size(); i++ )
cout << in[i] << " -> " << (gl[i] == -1 ? gl[i] : in[gl[i]]) << endl;
return 0;
}
void find_next_greater(void){
int tmp;
while ( cin >> tmp )
{
in.push_back(tmp);
while ( !s.empty() && in[s.top()] < tmp )
{
gl[s.top()] = in.size()-1;
s.pop();
}
gl.resize(in.size());
s.push(in.size()-1);
}
while ( !s.empty() )
{
gl[s.top()] = -1;
s.pop();
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RhY2s+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp2ZWN0b3I8aW50PiBpbiwgZ2w7CnN0YWNrPGludD4gczsKCnZvaWQgZmluZF9uZXh0X2dyZWF0ZXIodm9pZCk7CgppbnQgbWFpbigpCnsKICAgIGZpbmRfbmV4dF9ncmVhdGVyKCk7CiAgICAKICAgIGZvciAoIGludCBpID0gMDsgaSA8IGdsLnNpemUoKTsgaSsrICkKICAgIAljb3V0IDw8IGluW2ldIDw8ICIgLT4gIiA8PCAoZ2xbaV0gPT0gLTEgPyBnbFtpXSA6IGluW2dsW2ldXSkgPDwgZW5kbDsKICAgIAogICAgcmV0dXJuIDA7Cn0KCnZvaWQgZmluZF9uZXh0X2dyZWF0ZXIodm9pZCl7CgogICAgaW50IHRtcDsKICAgIHdoaWxlICggY2luID4+IHRtcCApCiAgICB7CiAgICAgICAgaW4ucHVzaF9iYWNrKHRtcCk7CiAgICAgICAgd2hpbGUgKCAhcy5lbXB0eSgpICYmIGluW3MudG9wKCldIDwgdG1wICkKICAgICAgICB7CiAgICAgICAgICAgIGdsW3MudG9wKCldID0gaW4uc2l6ZSgpLTE7CiAgICAgICAgICAgIHMucG9wKCk7CiAgICAgICAgfQoKICAgICAgICBnbC5yZXNpemUoaW4uc2l6ZSgpKTsKICAgICAgICBzLnB1c2goaW4uc2l6ZSgpLTEpOwogICAgfQoKICAgIHdoaWxlICggIXMuZW1wdHkoKSApCiAgICB7CiAgICAgICAgZ2xbcy50b3AoKV0gPSAtMTsKICAgICAgICBzLnBvcCgpOwogICAgfQp9Cg==