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

template<class T>
class MyList : public list<T> {
public:
	void addInMiddle(const T&);
	void printList();
};

template<class T>
void MyList<T>::addInMiddle(const T& x) {

	typename list<T>::iterator it = this->begin();

	int location = (this->size()) / 2;     //where we want to insert the new element
	for (int i = 0; i < location; i++) {
		it++;
	}
	this->insert(it,x);
}

template<class T>
void MyList<T>::printList() {
	for (const auto &elem : *this) {
		cout << elem << " ";
	}
	cout << endl;
}

int main()
{
	MyList<int> list1;
	list1.push_back(1);
	list1.push_back(2);
	list1.push_back(3);
	list1.push_back(4);
	list1.addInMiddle(5);
	list1.printList();
	return 0;
}