#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
template<typename T>
struct Matrix{
Matrix(size_t width, size_t height):
_width(width),
_height(height),
_data(width*height){}
auto width() const{ return _width; }
auto height() const{ return _height; }
auto *operator[](size_t idx){ return _data.data() + (idx * _height); }
const auto *operator[](size_t idx) const{ return _data.data() + (idx * _height); }
auto begin(){ return ::begin(_data); }
auto begin() const{ return ::begin(_data); }
auto end(){ return ::end(_data); }
auto end() const{ return ::end(_data); }
private:
size_t _width, _height;
std::vector<T> _data;
};
int main(){
Matrix<int> m(15, 15);
iota(begin(m), end(m), 0);
for(size_t y = 0; y < m.height(); ++y){
for(size_t x = 0; x < m.width(); ++x){
cout << m[y][x] << ' ';
}
cout << '\n';
}
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IE1hdHJpeHsKICAgIE1hdHJpeChzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQpOgogICAgICAgIF93aWR0aCh3aWR0aCksCiAgICAgICAgX2hlaWdodChoZWlnaHQpLAogICAgICAgIF9kYXRhKHdpZHRoKmhlaWdodCl7fQoKICAgIGF1dG8gd2lkdGgoKSBjb25zdHsgcmV0dXJuIF93aWR0aDsgfQoKICAgIGF1dG8gaGVpZ2h0KCkgY29uc3R7IHJldHVybiBfaGVpZ2h0OyB9CgogICAgYXV0byAqb3BlcmF0b3JbXShzaXplX3QgaWR4KXsgcmV0dXJuIF9kYXRhLmRhdGEoKSArIChpZHggKiBfaGVpZ2h0KTsgfQogICAgY29uc3QgYXV0byAqb3BlcmF0b3JbXShzaXplX3QgaWR4KSBjb25zdHsgcmV0dXJuIF9kYXRhLmRhdGEoKSArIChpZHggKiBfaGVpZ2h0KTsgfQoKICAgIGF1dG8gYmVnaW4oKXsgcmV0dXJuIDo6YmVnaW4oX2RhdGEpOyB9CiAgICBhdXRvIGJlZ2luKCkgY29uc3R7IHJldHVybiA6OmJlZ2luKF9kYXRhKTsgfQoKICAgIGF1dG8gZW5kKCl7IHJldHVybiA6OmVuZChfZGF0YSk7IH0KICAgIGF1dG8gZW5kKCkgY29uc3R7IHJldHVybiA6OmVuZChfZGF0YSk7IH0KcHJpdmF0ZToKICAgIHNpemVfdCBfd2lkdGgsIF9oZWlnaHQ7CiAgICBzdGQ6OnZlY3RvcjxUPiBfZGF0YTsKfTsKCmludCBtYWluKCl7CglNYXRyaXg8aW50PiBtKDE1LCAxNSk7Cglpb3RhKGJlZ2luKG0pLCBlbmQobSksIDApOwoJCglmb3Ioc2l6ZV90IHkgPSAwOyB5IDwgbS5oZWlnaHQoKTsgKyt5KXsKCQlmb3Ioc2l6ZV90IHggPSAwOyB4IDwgbS53aWR0aCgpOyArK3gpewoJCQljb3V0IDw8IG1beV1beF0gPDwgJyAnOwoJCX0KCQljb3V0IDw8ICdcbic7Cgl9Cn0=