class MyCircularQueue {
	vector<int> queue;
	int frontIdx;
	int rearIndx;
	int length;
public:
	MyCircularQueue(int k) {
		queue.resize(k);
		frontIdx = -1;
		rearIndx = -1;
		length = 0;
	}

	bool enQueue(int value) {
		if (length == queue.size()) return false;

		if (length == 0) 
    {
        frontIdx = 0;
        rearIndx = -1;
    }
		rearIndx++;
		if (rearIndx % queue.size() == 0)
		{
			rearIndx = 0;
			queue[rearIndx] = value;
		}
		else {
			queue[rearIndx] = value;
		}
		length++;
		return true;
	}

	bool deQueue() {
		if (length == 0) return false;

		queue[frontIdx] = -1;
		frontIdx++;
		if (frontIdx % queue.size() == 0) {
			frontIdx = 0;
		}
		length--;
		return true;
	}

	int Front() {
		if (length == 0) return -1;
		return queue[frontIdx];
	}

	int Rear() {
		if (length == 0) return -1;
		return queue[rearIndx];
	}

	bool isEmpty() {
		if (length == 0) return true;
		return false;
	}

	bool isFull() {
		if (length == queue.size()) return true;
		return false;
	}
};