#include <iostream>
#include <fstream>
using namespace std;
const size_t SIZE =4;
template<typename T>
class Matrix
{
private:
T arr[SIZE][SIZE];
template <typename T1> friend ostream& operator << (ostream &, const Matrix<T1> &);
template <typename T1> friend istream& operator >> (istream &, Matrix<T1> &);
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+CmNsYXNzIE1hdHJpeAp7CnByaXZhdGU6CiAgICBUIGFycltTSVpFXVtTSVpFXTsKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUMT4gZnJpZW5kICBvc3RyZWFtJiBvcGVyYXRvciA8PCAob3N0cmVhbSAmLCBjb25zdCBNYXRyaXg8VDE+ICYpOwogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQxPiBmcmllbmQgIGlzdHJlYW0mIG9wZXJhdG9yID4+IChpc3RyZWFtICYsIE1hdHJpeDxUMT4gJik7CiAgICB2b2lkIGluaXRpYWxpemUoKTsvLyDRhNGD0L3QutGG0LjRjyDQutC+0YLQvtGA0LDRjyDQt9Cw0L/QvtC70L3Rj9C10YIg0LzQsNGC0YDQuNGG0YMg0LrQsNC6INC10LTQuNC90LjRh9C90YPRjgoKcHVibGljOgogICAgTWF0cml4KCkge30KICAgIE1hdHJpeChjb25zdCBNYXRyaXg8VD4mKTsKICAgIGNvbnN0IE1hdHJpeCYgb3BlcmF0b3I9KGNvbnN0IE1hdHJpeDxUPiYpOwogICAgY29uc3QgTWF0cml4JiBvcGVyYXRvciooY29uc3QgTWF0cml4PFQ+Jik7CiAgICB2b2lkICBvcGVyYXRvcio9KGNvbnN0IE1hdHJpeDxUPiAmKTsKICAgIFQqIG9wZXJhdG9yW10oaW50IHJvdyk7Cn07Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVD4Kb3N0cmVhbSAmIG9wZXJhdG9yPDwob3N0cmVhbSAmIG9zLCBjb25zdCBNYXRyaXg8VD4gJiByaHMpCnsKICAgIGZvciAoaW50IGkoMCk7IGkgPCBTSVpFOyArK2kpCiAgICB7CiAgICAgICAgZm9yIChpbnQgaigwKTsgaiA8IFNJWkU7ICsraikKICAgICAgICB7CiAgICAgICAgICAgIG9zIDw8IHJocy5hcnJbaV1bal0gPDwgJyAnOwogICAgICAgIH0KICAgICAgICBvcyA8PCBlbmRsOwogICAgfQogICAgcmV0dXJuIG9zOwp9Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVD4KaXN0cmVhbSAmIG9wZXJhdG9yPj4oaXN0cmVhbSYgIGlzLCBNYXRyaXg8VD4gJiByaHMpCnsKICAgIGZvciAoaW50IGkoMCk7IGkgPCBTSVpFOyArK2kpCiAgICB7CiAgICAgICAgZm9yIChpbnQgaigwKTsgaiA8IFNJWkU7ICsraikKICAgICAgICB7CiAgICAgICAgICAgIGlzID4+IHJocy5hcnJbaV1bal07CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGlzOwp9CgppbnQgbWFpbigpCnsKCU1hdHJpeCA8aW50PiBtOwoJaWZzdHJlYW0oImlucHV0LnR4dCIpID4+IG07CgkKCXJldHVybiAwOwp9