#include <iostream>
#include<string>
#include <vector>
using namespace std;



class Class1
{
    public:
        vector<vector<int> > matrix;
        vector<vector<int> >  tmp;
        Class1(vector<vector<int> > p):matrix(move(p)){}

        //This function is used to perform the multiplication operation between two square matrices
        Class1 operator*(const Class1& mat2)
        {
            Class1& mat1 = *this;

            for(int i=0;i<4;i++)
            {
                for(int j=0;j<4;j++)
                {
                    for(int k=0;k<4;k++)
                    {
                        tmp[i][j]=tmp[i][j]+(mat2.matrix[i][k]*mat1.matrix[k][j]);
                    }
                }
            }
            return tmp;
        }

        void PrintVector()
        {
            for(int i=0;i<4;i++)
            {

                for(int j=0;j<4;j++)
                {
                    cout<<tmp[i][j]<<"  ";
                }
                cout<<endl;
            }
            cout<<endl;
        }

};

int main()
{
    Class1 Matrix1 =   {{{ 21, 12, 13, 14 },
        { 5, 6, 6, 8 },
        { 9, 8, 7, 6 },
        { 3, 2, 1, 1 } }};

    Class1 Matrix2 = Matrix1;


    Class1 Matrix3 = Matrix1 * Matrix2;

    Matrix3.PrintVector();

    return 0;
}
