#include <iostream>
#include <cassert>
#include <cstdlib>
using namespace std;
template<typename T>
class Array;
template<typename T>
ostream & operator <<(ostream &, const Array<T> &);
template<typename T>
istream & operator >>(istream &, Array<T> &);
template <class T> class Array {
friend ostream & operator << <>(ostream &, const Array<T> &);
friend istream & operator >> <>(istream &, Array<T> &);
public:
Array(int = 10);
~Array();
private:
T *ptr; //указатель на 1й элемент
int size; //размер массива
// static
};
template <class T> Array<T>::Array(int arraySize) {
size = arraySize;
ptr = new T[size];
assert(ptr != 0); //завершить, если память не выделена
}
template <class T> Array<T>::~Array() {
delete [] ptr;
}
template <class T> istream& operator>> (istream& in, Array<T>& x) {
for (int i = 0; i < x.size; ++i) {
in >> x.ptr[i];
}
return in;
}
template <class T> ostream& operator << (ostream & out, const Array<T> &x) {
for (int i = 0; i < x.size; ++i) {
out << x.ptr[i] << " ";
}
return out;
}
int main() {
Array<int> a(5);
cin >> a;
cout << a;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2Fzc2VydD4KI2luY2x1ZGUgPGNzdGRsaWI+CiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmNsYXNzIEFycmF5OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kb3N0cmVhbSAmIG9wZXJhdG9yIDw8KG9zdHJlYW0gJiwgY29uc3QgQXJyYXk8VD4gJik7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgppc3RyZWFtICYgb3BlcmF0b3IgPj4oaXN0cmVhbSAmLCBBcnJheTxUPiAmKTsKIAp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgQXJyYXkgewogICAgZnJpZW5kIG9zdHJlYW0gJiBvcGVyYXRvciA8PCA8Pihvc3RyZWFtICYsIGNvbnN0IEFycmF5PFQ+ICYpOwogICAgZnJpZW5kIGlzdHJlYW0gJiBvcGVyYXRvciA+PiA8Pihpc3RyZWFtICYsIEFycmF5PFQ+ICYpOwpwdWJsaWM6CiAgICBBcnJheShpbnQgPSAxMCk7CiAgICB+QXJyYXkoKTsKcHJpdmF0ZToKICAgIFQgKnB0cjsgLy/Rg9C60LDQt9Cw0YLQtdC70Ywg0L3QsCAx0Lkg0Y3Qu9C10LzQtdC90YIKICAgIGludCBzaXplOyAvL9GA0LDQt9C80LXRgCDQvNCw0YHRgdC40LLQsAogICAgLy8gICAgc3RhdGljCn07CiAKdGVtcGxhdGUgPGNsYXNzIFQ+IEFycmF5PFQ+OjpBcnJheShpbnQgYXJyYXlTaXplKSB7CiAgICBzaXplID0gYXJyYXlTaXplOwogICAgcHRyID0gbmV3IFRbc2l6ZV07CiAgICBhc3NlcnQocHRyICE9IDApOyAvL9C30LDQstC10YDRiNC40YLRjCwg0LXRgdC70Lgg0L/QsNC80Y/RgtGMINC90LUg0LLRi9C00LXQu9C10L3QsAp9CiAKdGVtcGxhdGUgPGNsYXNzIFQ+IEFycmF5PFQ+Ojp+QXJyYXkoKSB7CiAgICBkZWxldGUgW10gcHRyOwp9CiAKdGVtcGxhdGUgPGNsYXNzIFQ+IGlzdHJlYW0mIG9wZXJhdG9yPj4gKGlzdHJlYW0mIGluLCAgQXJyYXk8VD4mIHgpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeC5zaXplOyArK2kpIHsKICAgICAgICBpbiA+PiB4LnB0cltpXTsKICAgIH0KICAgIHJldHVybiBpbjsKfQogCnRlbXBsYXRlIDxjbGFzcyBUPiBvc3RyZWFtJiBvcGVyYXRvciA8PCAob3N0cmVhbSAmIG91dCwgY29uc3QgQXJyYXk8VD4gJngpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeC5zaXplOyArK2kpIHsKICAgICAgICBvdXQgPDwgeC5wdHJbaV0gPDwgIiAiOwogCiAgICB9CiAgICByZXR1cm4gb3V0Owp9CiAKaW50IG1haW4oKSB7CiAgICBBcnJheTxpbnQ+IGEoNSk7CiAgICBjaW4gPj4gYTsKICAgIGNvdXQgPDwgYTsKIAogICAgcmV0dXJuIDA7Cn0K