#include <string>

class Object {
  public:
    virtual std::string ToString() const = 0;
    virtual ~Object() {}
};

class ObjIns : public Object {
 public:
  ObjIns(const std::string& class_id):
    id(class_id) {}

  std::string ToString() const override {
    return id;
  }

 private:
  std::string id;
};

class Factory {
  public:
    Factory() {}

    Object* Create(const std::string& class_id) {
      
      return new ObjIns(class_id);
    }

    void Register(const std::string& class_id, Object* (*func)()) {
      
    }
};