#include <bits/stdc++.h>
using
namespace
std;
class
Queue {
deque<
int
> first, second;
void
equalizeSizedeque1deque2()
{
if
(first.size() <= second.size())
return
;
second.push_front(first.back());
first.pop_back();
}
void
equalizeSizedeque2deque1()
{
if
(second.size() <= first.size() + 1)
return
;
first.push_back(second.front());
second.pop_front();
}
public
:
void
push__front(
int
val)
{
first.push_front(val);
equalizeSizedeque1deque2();
}
void
push__middle(
int
val)
{
first.push_back(val);
equalizeSizedeque1deque2();
}
void
push__back(
int
val)
{
second.push_back(val);
equalizeSizedeque2deque1();
}
int
pop__front()
{
if
(first.empty() && second.empty())
return
-1;
int
ans;
if
(first.empty()) {
ans = second.front();
second.pop_front();
}
else
{
ans = first.front();
first.pop_front();
equalizeSizedeque2deque1();
}
return
ans;
}
int
pop__middle()
{
if
(first.empty() && second.empty())
return
-1;
int
ans;
if
(first.size() == second.size()) {
ans = first.back();
first.pop_back();
}
else
{
ans = second.front();
second.pop_front();
}
return
ans;
}
int
pop__back()
{
if
(first.empty() && second.empty())
return
-1;
int
ans = second.back();
second.pop_back();
equalizeSizedeque1deque2();
return
ans;
}
};
int
main()
{
Queue q;
q.push__front(1);
q.push__back(2);
q.push__middle(3);
cout << q.pop__middle() <<
" "
;
cout << q.pop__back() <<
" "
;
cout << q.pop__front() <<
" "
;
return
0;
}