namespace std
{
template<typename Tp_,typename _Sequence=list<Tp_> >
class queue
{
public:
typedef typename _Sequence::size_type size_type;
typedef typename _Sequence::reference reference;
typedef typename _Sequence::const_reference const_reference;
typedef typename _Sequence::value_type value_type;
typedef _Sequence container_type;
protected:
_Sequence c;
public:
queue():c() {}
queue(const _Sequence& __c):c(__c) {}
queue(const queue<value_type>& __q) {*this=__q;}
~queue() {}
reference front() {return c.front();}
reference back() {return c.back();}
void push(const value_type& x) {c.push_back(x);}
void emplace(const value_type& x) {c.emplace_back(x);}
void pop() {c.pop_front();}
size_type size() {return c.size();}
bool empty() {return c.empty();}
void swap(const queue<value_type>& __q)
{
using std::swap;
swap(c,__q.c);
}
bool operator==(const queue<value_type>& b) {return c==b.c;}
bool operator<(const queue<value_type>& b) {return c<b.c;}
};
}