public class Main{
    public static void main(String[] args){
        int[] sizes = {100, 300, 500};

        for (int size : sizes) {
            int[][] matrixA = MatrixGenerator.generateMatrix(size);
            int[][] matrixB = MatrixGenerator.generateMatrix(size);

            System.out.println("Размер матрицы: " + size + "x" + size);
            System.out.println("Матрица A:");
            MatrixPrinter.printMatrix(matrixA, 5);
            System.out.println("Матрица B:");
            MatrixPrinter.printMatrix(matrixB, 5);

            long startSequential = System.nanoTime();
            int[][] resultSequential = MatrixMultiplication.multiply(matrixA, matrixB, 1);
            long endSequential = System.nanoTime();
            System.out.println("Результат последовательного умножения:");
            MatrixPrinter.printMatrix(resultSequential, 5);
            System.out.println("Время последовательного умножения: " + (endSequential - startSequential) / 1_000_000 + " ms");

            for (int numThreads : new int[]{2, 4, 8}) {
                long startParallel = System.nanoTime();
                int[][] resultParallel = MatrixMultiplication.multiply(matrixA, matrixB, numThreads);
                long endParallel = System.nanoTime();
                System.out.println("Результат параллельного умножения (" + numThreads + " потоков):");
                MatrixPrinter.printMatrix(resultParallel, 5);
                System.out.println("Время параллельного умножения: " + (endParallel - startParallel) / 1_000_000 + " ms");
            }
            System.out.println("--------------------------------------------------");
        }
    }
}