#include <bits/stdc++.h> using namespace std; namespace LIB { template<class T>class DequeSet { public: deque<T> d; unordered_set<T> s; DequeSet() {} DequeSet(initializer_list<T> il) { for(auto&e: il) push_back(e); } auto back() { return d.back(); } auto begin() { return d.begin(); } auto end() { return d.end(); } void insert(auto i, auto x) { d.insert(i,x),s.insert(x); } auto exists(auto x) { return s.find(x)==s.end()?0ll:1ll; } auto pop_back() { T t=d.back(); d.pop_back(),s.erase(t); return t; } auto pop_front() { T t=d.front(); d.pop_front(),s.erase(t); return t; } auto push_back(auto x) { d.push_back(x),s.insert(x); } auto push_front(auto x) { d.push_front(x),s.insert(x); } auto size() { return d.size(); } auto& operator[](auto i) { return d[i]; } auto operator[](auto i) const { return d[i]; } }; }