#include<iostream>
#include<stack>
using namespace std;
stack<int> m_data;
stack<int> m_min;
void stackwithminpush(int Element)
{
int top;
m_data.push(Element);
if(m_min.empty())
{
m_min.push(Element);
}
else
{
top=m_min.top();
m_min.push(min(Element,top));
}
}
int stackwithminmin()
{
return m_min.top();
}
void stackwithminpop()
{
m_data.pop();
m_min.pop();
}
int main()
{
stackwithminpush(3);
cout<<stackwithminmin()<<endl;
stackwithminpush(4);
cout<<stackwithminmin()<<endl;
stackwithminpush(2);
cout<<stackwithminmin()<<endl;
stackwithminpush(1);
cout<<stackwithminmin()<<endl;
stackwithminpop();
cout<<stackwithminmin()<<endl;
stackwithminpop();
cout<<stackwithminmin()<<endl;
stackwithminpush(0);
cout<<stackwithminmin()<<endl;
return 0;
}