#include <iostream>
#include <iomanip>
#include <map>
using namespace std;
class Array
{
struct proxy
{
int operator =(int v)
{
m[s] = v;
return v;
}
operator int()
{
if (m.count(s)) return m[s];
return 0;
}
proxy(Array*a, size_t s):m(a->m),s(s){}
map<size_t,int> &m;
size_t s;
};
public:
Array() = default;
proxy operator[](size_t s)
{
return proxy(this,s);
}
size_t count() { return m.size(); }
private:
map<size_t,int> m;
};
int main(int argc, const char * argv[])
{
Array a;
a[5] = 4;
for(int i = 0; i < 7; ++i) cout << a[i] << " ";
cout << "\n" << a.count() << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPG1hcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBBcnJheQp7CgogICAgc3RydWN0IHByb3h5CiAgICB7CiAgICAgICAgaW50IG9wZXJhdG9yID0oaW50IHYpCiAgICAgICAgewogICAgICAgICAgICBtW3NdID0gdjsKICAgICAgICAgICAgcmV0dXJuIHY7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBpbnQoKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKG0uY291bnQocykpIHJldHVybiBtW3NdOwogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICAgIHByb3h5KEFycmF5KmEsIHNpemVfdCBzKTptKGEtPm0pLHMocyl7fQogICAgICAgIG1hcDxzaXplX3QsaW50PiAmbTsKICAgICAgICBzaXplX3QgczsKICAgIH07CnB1YmxpYzoKICAgIEFycmF5KCkgPSBkZWZhdWx0OwoKICAgIHByb3h5IG9wZXJhdG9yW10oc2l6ZV90IHMpCiAgICB7CiAgICAgICAgcmV0dXJuIHByb3h5KHRoaXMscyk7CiAgICB9CgogICAgc2l6ZV90IGNvdW50KCkgeyByZXR1cm4gbS5zaXplKCk7IH0KCnByaXZhdGU6CiAgICBtYXA8c2l6ZV90LGludD4gbTsKfTsKCmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQp7CiAgICBBcnJheSBhOwogICAgYVs1XSA9IDQ7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgNzsgKytpKSBjb3V0IDw8IGFbaV0gPDwgIiAiOwogICAgY291dCA8PCAiXG4iIDw8IGEuY291bnQoKSA8PCBlbmRsOwp9Cg==