#include <fstream>
#include <vector>
#include <list>
#include <math.h>
#include <iostream>
#include <memory>
using namespace std;

template <class T>
class Factory {
protected:
    int num;
public:
    Factory(int num) : num(num) {}
    virtual T * create() {
        return new T(num);
    }
};

class Integer {
    int num;
public:
    Integer(int num) : num(num) {}
};

class Pair {
    int num1, num2;
public:
    Pair(int num1, int num2) : num1(num1), num2(num2) {}
};

class ExtendedFactory : public Factory<Pair> {
protected:
    int num2;
public:
    ExtendedFactory(int num1, int num2) : Factory(num1), num2(num2) {}
    virtual Pair * create() {
        return new Pair(num, 24);
    }
};

int main()
{
    Factory<Integer> ints(42);
    ints.create();
    return 0;
}