class MyCircularDeque {
public:
int capcaity;
int length;
int head;
int rear;
vector<int>vec;
MyCircularDeque(int k) :vec(k){
capcaity=k;
length=0;
head=0;
rear=0;
}
bool insertFront(int value) {
if(isFull()) return false;
length++;
head=head-1;
if (head==-1) head=capcaity-1;
vec[head]=value;
return true;
}
bool insertLast(int value) {
if((length+1)>capcaity) return false;
length++;
rear=rear%capcaity+1;
vec[rear-1]=value;
return true;
}
bool deleteFront() {
if(length==0) return false;
length--;
head=(head+1)%capcaity;
return true;
}
bool deleteLast() {
if(isEmpty()) return false;
if(rear==0) rear=capcaity;
rear--;
length--;
return true;
}
int getFront() {
if(isEmpty()) return -1;
return vec[head];
}
int getRear() {
if(isEmpty()) return -1;
if(rear==0) rear=capcaity;
return vec[rear-1];
}
bool isEmpty() {
if(length==0) return true;
return false;
}
bool isFull() {
if(length==capcaity) return true;
else return false;
}
};