#include <iostream>

using namespace std;

template <typename E>
class DLinkedList {

private:
struct DNode { E elem; DNode* prev; DNode* next; };
DNode *header , *trailer;
int numberOfElements;

public:

DLinkedList()
{
header = new DNode;
trailer = new DNode;
header ->next = trailer;
trailer ->prev = header;
numberOfElements = 0;
}

virtual ~DLinkedList();



bool empty() const
{
return (numberOfElements == 0);
}

int size() const
{
return numberOfElements;
}

E& front() const
{
return header ->next ->elem;
}

E& back() const
{
return trailer ->prev ->elem;
}
void push_front(const E& e);

void push_back(const E& e);

void pop_front();

void pop_back();


Iterator begin() const
{
return Iterator(header ->next);
}
Iterator end() const
{
return Iterator(trailer);
}
void insert(const Iterator& it, const E& e);
void erase(const Iterator& it);
}; 



template <typename E>
bool containsSublist(DLinkedList<E>& L,DLinkedList<E>& S)
{ 
  if (S.empty()) return true;

typename Iterator<E>::Iterator it;
typename Iterator<E>::Iterator ot;
while(!L.empty())
 {
 int count=0;
 
 for (Iterator it=L.begin();it!=L.end();it++)
  for(Iterator ot=S.begin();ot!=S.end();ot++)
    
	 {
	if( *it==*ot)
	  count++;
	 }
	 if(count>=2) return true;
	 else return false;
 }  




}
