#include <iostream>
#include <vector>
#include <memory>
 
struct SmallWorld {
	int some_small_world_stuff;	
};
 
struct Entity {
	std::shared_ptr<SmallWorld> world;
};
 
 
struct Faction {
	std::vector<std::shared_ptr<Entity>> entities;
};
 
struct World : public SmallWorld {
	std::vector<std::shared_ptr<Faction>> factions;
};
 
int main() {
	auto world = std::make_shared<World>();
	world->some_small_world_stuff = 1337;
	auto fac1 = std::make_shared<Faction>();
	auto ent1 = std::make_shared<Entity>();
 
	ent1->world= world;
	fac1->entities.emplace_back(ent1);
	world->factions.emplace_back(fac1);
 
	std::cout << world->factions[0]->entities[0]->world->some_small_world_stuff << std::endl;
}
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWVtb3J5PgoKc3RydWN0IFNtYWxsV29ybGQgewoJaW50IHNvbWVfc21hbGxfd29ybGRfc3R1ZmY7CQp9OwoKc3RydWN0IEVudGl0eSB7CglzdGQ6OnNoYXJlZF9wdHI8U21hbGxXb3JsZD4gd29ybGQ7Cn07CgoKc3RydWN0IEZhY3Rpb24gewoJc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEVudGl0eT4+IGVudGl0aWVzOwp9OwoKc3RydWN0IFdvcmxkIDogcHVibGljIFNtYWxsV29ybGQgewoJc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEZhY3Rpb24+PiBmYWN0aW9uczsKfTsKCmludCBtYWluKCkgewoJYXV0byB3b3JsZCA9IHN0ZDo6bWFrZV9zaGFyZWQ8V29ybGQ+KCk7Cgl3b3JsZC0+c29tZV9zbWFsbF93b3JsZF9zdHVmZiA9IDEzMzc7CglhdXRvIGZhYzEgPSBzdGQ6Om1ha2Vfc2hhcmVkPEZhY3Rpb24+KCk7CglhdXRvIGVudDEgPSBzdGQ6Om1ha2Vfc2hhcmVkPEVudGl0eT4oKTsKCgllbnQxLT53b3JsZD0gd29ybGQ7CglmYWMxLT5lbnRpdGllcy5lbXBsYWNlX2JhY2soZW50MSk7Cgl3b3JsZC0+ZmFjdGlvbnMuZW1wbGFjZV9iYWNrKGZhYzEpOwoJCglzdGQ6OmNvdXQgPDwgd29ybGQtPmZhY3Rpb25zWzBdLT5lbnRpdGllc1swXS0+d29ybGQtPnNvbWVfc21hbGxfd29ybGRfc3R1ZmYgPDwgc3RkOjplbmRsOwp9