using System.Collections.Generic;
interface IStackCollection
interface IQueueCollection
void push_front(int num);
class MyStack : IStackCollection
private List<int> my_stack = new List<int>();
public void push_back(int num)
int last_elem = my_stack.Last();
my_stack.RemoveAt(my_stack.Count - 1);
return my_stack[my_stack.Count - 1];
class MyQueue : IQueueCollection
private List<int> my_queue = new List<int>();
public void push_front(int num)
int last_elem = my_queue[0];
my_queue.RemoveAt(my_queue[0]);
public class MyDeque : IStackCollection, IQueueCollection
private int check_back = 0;
private int check_front = 0;
public void push_back(int num)
public void push_front(int num)
return deq[deq.Count - 1];
throw new IndexOutOfRangeException("error");
public bool TryBack(out int value)
value = deq[deq.Count - 1];
public bool TryFront(out int value)
public bool TryPopFront(out int value)
public bool TryPopBack(out int value)
value = deq[deq.Count - 1];
deq.RemoveAt(deq.Count - 1);
throw new IndexOutOfRangeException("error");
elem = deq[deq.Count - 1];
deq.RemoveAt(deq.Count - 1);
throw new IndexOutOfRangeException("error");
throw new IndexOutOfRangeException("error");
public static void Main()
MyDeque deq = new MyDeque();
var str = Console.ReadLine().Split(' ');
number = Int32.Parse(str[1]);
Console.WriteLine(deq.pop_back());
Console.WriteLine(deq.pop_front());
Console.WriteLine(deq.front());
Console.WriteLine(deq.back());
if (deq.TryBack(out value))
Console.WriteLine(value);
throw new IndexOutOfRangeException("error");
if (deq.TryFront(out value))
Console.WriteLine(value);
throw new IndexOutOfRangeException("error");
if (deq.TryPopFront(out value))
Console.WriteLine(value);
throw new IndexOutOfRangeException("error");
if (deq.TryPopBack(out value))
Console.WriteLine(value);
throw new IndexOutOfRangeException("error");
Console.WriteLine(deq.size());
Console.WriteLine("bye");