#include <iostream>
#include <string>
using namespace std;

struct deque{
    #define Size 200000
    int start, end;
    int folder[Size];
    
    deque(){
        start = end = Size/2;
    }
    void push_front(int var){
        folder[--start] = var;
        cout << "ok" << endl;
    }
    void push_back(int var){
        folder[end++] = var;
        cout << "ok" << endl;
    }
    void pop_front(){
    	cout << folder[start++] << endl;
    }
    void pop_back(){
    	cout << folder[--end] << endl;
    }
    void front(){
    	cout << folder[start] << endl;
    }
    void back(){
    	cout << folder[end-1] << endl;
    }
    void size(){
    	cout << end-start << endl;
    }
    void clear(){
    	start = end = Size/2;
    	cout << "ok" << endl; 
    }
};
		
int main() {
	string s;
	deque deq;
	int n;

	while (cin >> s){
		if (s == "push_front"){
			cin >> n;
			deq.push_front(n);
		}
		else	if (s == "push_back"){
				cin >> n;
				deq.push_back(n);
		}
		else	if (s == "pop_front")	deq.pop_front();
		else	if (s == "pop_back")	deq.pop_back();
		else	if (s == "front")	deq.front();
		else	if (s == "back")	deq.back();
		else	if (s == "size")	deq.size();
		else	if (s == "clear")	deq.clear();
		else	if (s == "exit"){
				cout << "bye";
				return 0;
		}
	}
}