#include <iostream>
using namespace std;

class Room {
private:
  // association
  unsigned int nSubRooms;
  Room *subRooms;
public:
  Room() : nSubRooms(0), subRooms(0) { }
  unsigned int getNbSubRooms() const {
    return nSubRooms;
  }
  Room *getSubRoom(unsigned int i) const {
    if (i<nSubRooms) return subRooms+i;
    return 0;
  }
  void addSubRooms(unsigned int n) {
    nSubRooms = n;
    subRooms = new Room[n];
  }
  ~Room() {
    if (nSubRooms) delete [] subRooms;
  }
};

class Building {
private:
  const int nRooms;
  Room *const rooms;
public:
  Building(unsigned int n) : nRooms(n), rooms(new Room[nRooms]) {
  }
  Room *getRoom(unsigned int i) const {
    if (i<nRooms) return rooms+i;
    return 0;
  }
  unsigned int getNbRooms() const {
    return nRooms;
  }
  ~Building() {
    if (nRooms) delete [] rooms;
  }
};

int main() {
  Building b(10);

  b.getRoom(1)->addSubRooms(2);

  cout << b.getNbRooms() << endl;

  for (int i=0; i<b.getNbRooms(); i++) {
    cout << b.getRoom(i)->getNbSubRooms() << endl;
  }
  return 0;
}