#include <omp.h>
int main()
{
    int m,n,p,k,i,j,ibeg;
    float ce,a[1000][1000],b[1000][1000],c[1000][1000];
     ifstream ffin("input1.txt");
    ifstream ftin("input2.txt");
    ofstream fout("output.txt");
    ffin>>m>>n;
    ftin>>p>>k;
    if(n!=p) {fout<<"Problem with size!!!";return 0;}
    ce=0;
    #pragma omp parallel                        //запуск двух нитей для  
    {				           //чтения из двух файлов
    if(OMP_GET_THREAD == 0)
    {
    for(i=0;i<m;i++)
	for(j=0;j<n;j++)
	    ffin>>a[i][j];
    }
    if (OMP_GET_THREAD == 1)
    {
    for(i=0;i<p;i++)
	for(j=0;j<k;j++)
	    ftin>>b[i][j];
 	}
    }
    ibeg = clock(); 				//запускаем секундомер
omp_set_dtnamic(1);	  //разрешаем изменять кол-во нитей
omp_set_num_threads(10);		//запускаем еще 9 нитей
#pragma omp parallel
#pragma  omp parallel   for  SCHEDULE (STATIC) 
    for(i=0;i<m;i++)					//параллельное выполнение  
	for(j=0;j<k;j++)					//произведения матриц
	{  
	    for(p=0;p<n;p++)
		ce = ce + a[i][p] * b[p][j];
	    c[i][j]=ce;
	    ce=0;
	}
    fout<<(clock()-ibeg)/CLOCKS_PER_SEC<<"\n";   //вывод секундомера
    for(i=0;i<m;i++)
    {
	for(j=0;j<k;j++)		//вывод результата произведения матриц
	    fout<<c[i][j]<<" ";
	fout<<"\n";
    }
    return 0; }