#include <iostream>
#include <fstream>
using namespace std;
const size_t SIZE =4;
template<typename T>
class Matrix;
template< typename T>
ostream & operator<< (ostream &, const Matrix<T> &);
template< typename T>
istream& operator >> (istream &, Matrix<T> &);
template<typename T>
class Matrix
{
private:
T arr[SIZE][SIZE];
friend ostream& operator << <> (ostream &, const Matrix &);
friend istream& operator >> <> (istream &, Matrix &);
void initialize();// функция которая заполняет матрицу как единичную
public:
Matrix() {}
Matrix(const Matrix<T>&);
const Matrix& operator=(const Matrix<T>&);
const Matrix& operator*(const Matrix<T>&);
void operator*=(const Matrix<T> &);
T* operator[](int row);
};
template< typename T>
ostream & operator<<(ostream & os, const Matrix<T> & rhs)
{
for (int i(0); i < SIZE; ++i)
{
for (int j(0); j < SIZE; ++j)
{
os << rhs.arr[i][j] << ' ';
}
os << endl;
}
return os;
}
template< typename T>
istream & operator>>(istream& is, Matrix<T> & rhs)
{
for (int i(0); i < SIZE; ++i)
{
for (int j(0); j < SIZE; ++j)
{
is >> rhs.arr[i][j];
}
}
return is;
}
int main()
{
Matrix <int> m;
ifstream("input.txt") >> m;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBzaXplX3QgU0laRSA9NDsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmNsYXNzIE1hdHJpeDsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUPgpvc3RyZWFtICYgb3BlcmF0b3I8PCAob3N0cmVhbSAmLCBjb25zdCBNYXRyaXg8VD4gJik7Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVD4KaXN0cmVhbSYgb3BlcmF0b3IgPj4gKGlzdHJlYW0gJiwgTWF0cml4PFQ+ICYpOwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgTWF0cml4CnsKcHJpdmF0ZToKICAgIFQgYXJyW1NJWkVdW1NJWkVdOwogICAgZnJpZW5kICBvc3RyZWFtJiBvcGVyYXRvciA8PCA8PiAob3N0cmVhbSAmLCBjb25zdCBNYXRyaXggJik7CiAgICBmcmllbmQgIGlzdHJlYW0mIG9wZXJhdG9yID4+IDw+IChpc3RyZWFtICYsIE1hdHJpeCAmKTsKICAgIHZvaWQgaW5pdGlhbGl6ZSgpOy8vINGE0YPQvdC60YbQuNGPINC60L7RgtC+0YDQsNGPINC30LDQv9C+0LvQvdGP0LXRgiDQvNCw0YLRgNC40YbRgyDQutCw0Log0LXQtNC40L3QuNGH0L3Rg9GOCgpwdWJsaWM6CiAgICBNYXRyaXgoKSB7fQogICAgTWF0cml4KGNvbnN0IE1hdHJpeDxUPiYpOwogICAgY29uc3QgTWF0cml4JiBvcGVyYXRvcj0oY29uc3QgTWF0cml4PFQ+Jik7CiAgICBjb25zdCBNYXRyaXgmIG9wZXJhdG9yKihjb25zdCBNYXRyaXg8VD4mKTsKICAgIHZvaWQgIG9wZXJhdG9yKj0oY29uc3QgTWF0cml4PFQ+ICYpOwogICAgVCogb3BlcmF0b3JbXShpbnQgcm93KTsKfTsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUPgpvc3RyZWFtICYgb3BlcmF0b3I8PChvc3RyZWFtICYgb3MsIGNvbnN0IE1hdHJpeDxUPiAmIHJocykKewogICAgZm9yIChpbnQgaSgwKTsgaSA8IFNJWkU7ICsraSkKICAgIHsKICAgICAgICBmb3IgKGludCBqKDApOyBqIDwgU0laRTsgKytqKQogICAgICAgIHsKICAgICAgICAgICAgb3MgPDwgcmhzLmFycltpXVtqXSA8PCAnICc7CiAgICAgICAgfQogICAgICAgIG9zIDw8IGVuZGw7CiAgICB9CiAgICByZXR1cm4gb3M7Cn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBUPgppc3RyZWFtICYgb3BlcmF0b3I+Pihpc3RyZWFtJiAgaXMsIE1hdHJpeDxUPiAmIHJocykKewogICAgZm9yIChpbnQgaSgwKTsgaSA8IFNJWkU7ICsraSkKICAgIHsKICAgICAgICBmb3IgKGludCBqKDApOyBqIDwgU0laRTsgKytqKQogICAgICAgIHsKICAgICAgICAgICAgaXMgPj4gcmhzLmFycltpXVtqXTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gaXM7Cn0KCmludCBtYWluKCkKewoJTWF0cml4IDxpbnQ+IG07CglpZnN0cmVhbSgiaW5wdXQudHh0IikgPj4gbTsKCQoJcmV0dXJuIDA7Cn0=