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

class Person {
public:
	virtual ~Person() = default;
	virtual void talk()=0;
};

class Student : public Person {
public:
	void talk() {
		cout << "Teach me!\n";
	}
};

class Teacher : public Person {
	public:
	void talk() {
		cout << "Listen!\n";
	}
};

int main() {
	list<std::unique_ptr<Person>> people;
	people.push_back(unique_ptr<Person>(new Student()));
	people.push_back(unique_ptr<Person>(new Teacher()));
	
	for (auto& p : people) {
		p->talk();
	}
	
	return 0;
}