#include <iostream>
#include <vector>
#include <string>
class Matrix {
std:: vector < std:: vector < std:: string >> m;
public :
Matrix( int x = 0 , int y = 0 ) {
m.resize ( x) ;
for ( int i = 0 ; i < x; ++ i)
m[ i] .resize ( y) ;
}
void print( ) const {
for ( size_t i = 0 ; i < m.size ( ) ; ++ i) {
for ( size_t j = 0 ; j < m[ i] .size ( ) ; ++ j) {
std:: cout << '[' << m[ i] [ j] << ']' ;
}
std:: cout << std:: endl ;
}
}
class Proxy {
std:: vector < std:: string > & mm;
public :
Proxy( std:: vector < std:: string > & s) : mm( s) { }
std:: string & operator[ ] ( int index) {
return mm[ index] ;
}
} ;
Proxy operator[ ] ( int index) {
return Proxy( m[ index] ) ;
}
} ;
int main( )
{
Matrix m( 5 , 5 ) ;
m.print ( ) ;
std:: cout << std:: endl ;
m[ 2 ] [ 2 ] = "It Works" ;
std:: cout << m[ 2 ] [ 2 ] << std:: endl ;
m.print ( ) ;
std:: cout << std:: endl ;
Matrix m2( m) ;
std:: cout << m2[ 2 ] [ 2 ] << std:: endl ;
m2.print ( ) ;
std:: cout << std:: endl ;
Matrix m3;
m3 = m2;
std:: cout << m3[ 2 ] [ 2 ] << std:: endl ;
m3.print ( ) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPiAKCmNsYXNzIE1hdHJpeCB7CglzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4+IG07CnB1YmxpYzoKCU1hdHJpeChpbnQgeCA9IDAsIGludCB5ID0gMCkgewoJCW0ucmVzaXplKHgpOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgeDsgKytpKQoJCQltW2ldLnJlc2l6ZSh5KTsKCX0KCgl2b2lkIHByaW50KCkgY29uc3QgewoJCWZvcihzaXplX3QgaSA9IDA7IGkgPCBtLnNpemUoKTsgKytpKSB7CgkJCWZvciAoc2l6ZV90IGogPSAwOyBqIDwgbVtpXS5zaXplKCk7ICsraikgewoJCQkJc3RkOjpjb3V0IDw8ICdbJyA8PCBtW2ldW2pdIDw8ICddJzsKCQkJfQoJCQlzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwoJCX0KCX0KCgljbGFzcyBQcm94eSB7CgkJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZtbTsKCXB1YmxpYzoKCQlQcm94eShzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJnMpIDogbW0ocykge30KCgkJc3RkOjpzdHJpbmcmIG9wZXJhdG9yW10oaW50IGluZGV4KSB7CgkJCXJldHVybiBtbVtpbmRleF07CgkJfQoJfTsKCglQcm94eSBvcGVyYXRvcltdKGludCBpbmRleCkgewoJCXJldHVybiBQcm94eShtW2luZGV4XSk7Cgl9Cn07CgppbnQgbWFpbigpCnsKCU1hdHJpeCBtKDUsIDUpOwoJbS5wcmludCgpOwoJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCQoJbVsyXVsyXSA9ICJJdCBXb3JrcyI7CglzdGQ6OmNvdXQgPDwgbVsyXVsyXSA8PCBzdGQ6OmVuZGw7CgltLnByaW50KCk7CglzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwoKCU1hdHJpeCBtMihtKTsKCXN0ZDo6Y291dCA8PCBtMlsyXVsyXSA8PCBzdGQ6OmVuZGw7CgltMi5wcmludCgpOwoJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCQoJTWF0cml4IG0zOwoJbTMgPSBtMjsKCXN0ZDo6Y291dCA8PCBtM1syXVsyXSA8PCBzdGQ6OmVuZGw7CgltMy5wcmludCgpOwoKCXJldHVybiAwOwp9