#!/usr/bin/env python3

class Queue:
    def __init__(self, length = 10):
        self.head = 0
        self.tail = 0
        self.array = [0] * length
    
    def is_empty(self):
        return self.head == self.tail
        
    def size(self):
        if self.head <= self.tail:
            return self.tail - self.head
        else:
            return (len(self.array) - self.head) + (self.tail - 0)
            
    def front(self):
        return self.array[self.head]
    
    def back(self):
        return self.array[self.tail - 1]
        
    def push(self, elm):
        self.array[self.tail] = elm
        self.increase_tail()
        if self.head == self.tail:
            self.expand()
            
    def pop(self):
        elm = self.array[self.head]
        self.increase_head()
        return elm
        
    def increase_tail(self):
        self.tail = self.tail + 1
        if self.tail == len(self.array):
            self.tail = 0
            
    def increase_head(self):
        self.head = self.head + 1
        if self.head == len(self.array):
            self.head = 0
        
    def expand(self):
        length = len(self.array)
        self.array = self.array[self.head:]+self.array[:self.tail] + ([0] * length)
        self.head = 0
        self.tail = length
        
    def __str__(self):
        if self.head <= self.tail:
            return str(self.array[self.head:self.tail])
        else:
            return str(self.array[self.head:]+self.array[:self.tail])
