import java.util.ArrayList;

class ArrayListQueue
{

public ArrayListQueue(int size) {
//initialise data members

Maxsize=size;
front=0;
back=-1;
QArray= new ArrayList<Integer>();   //size not specified
}

public void Enqueue(Integer S)
{
 if(!IsFull()) {
    back++;
    QArray.add(S);
     }
 else
    System.out.println("No room in queue\n");
}

public void Dequeue()
{
 if(IsEmpty())
    System.out.println("Queue empty\n");
 else
 {

    QArray.remove(front);  //front of ArrayList index moves to zero
                           //so no need to increment front
    DecrementBack();       //list has shrunk
    System.out.println("\nDeq back= " + back);
    }
}

public int GetFront()
{
   if(IsEmpty()) {
     System.out.println("Queue empty \n");
     return -1;
     }
 else
    return QArray.get(front);

}

public void print() {

if(IsEmpty())
    System.out.println("Queue empty\n");
 else {
int temp;
int c=front;
while (c!=back)
  {
     temp = QArray.get(c);
     System.out.print("** "+ temp + " " + c);
     c=(++c)%Maxsize;
     }
   temp = QArray.get(c);
     System.out.print("** "+ temp);
   }
}

private boolean IsEmpty() {return QArray.size() == 0;}

private boolean IsFull() {return QArray.size()==Maxsize;}


public void MakeEmpty() {
          while(QArray.size()>0)
            this.Dequeue();

}


private void IncrementBack()
{
back++;
 }

private void DecrementBack()
{
back--;
 }


    private int Maxsize;
    private int front, back;
    private ArrayList<Integer> QArray;
}