#include <bits/stdc++.h>
using namespace std;
struct P {
	int value;
	int accumulated;
};
stack<P> A, B;
P merge(P x, P y){ // x is on top of y
	x.accumulated = max(x.accumulated, y.accumulated);
	return x;
}
void push(int value){
	P element;
	element.value = element.accumulated = value;
	if(!B.empty())
		element = merge(element, B.top());
	B.push(element);
}
void pop(){
	if(A.empty()){
		while(!B.empty()){
			P element = B.top();
			B.pop();
			element.accumulated = element.value;
			if(!A.empty())
				element = merge(element, A.top());
			A.push(element);
		}
	}
	A.pop();
}
int get_max(){
	int mx = -(1<<30);
	if(!A.empty())
		mx = max(mx, A.top().accumulated);
	if(!B.empty())
		mx = max(mx, B.top().accumulated);
	return mx;
}
int main() {
	push(7);
	push(5);
	cout << get_max() << '\n';
	pop();
	cout << get_max() << '\n';
	push(12);
	cout << get_max() << '\n';
	pop();
	cout << get_max() << '\n';
	pop();
	push(13);
	push(15);
	pop();
	push(17);
	cout << get_max() << '\n';
	return 0;
}