/*
 * matrices.cpp
 *
 *  Created on: 19.11.2013
 *      Author: trifon
 */

#include <iostream>
using namespace std;

const int MAX = 100;

int main() {
	int a[MAX][MAX];

	int m, n;
	cout << "m = ";cin >> m;
	cout << "n = ";cin >> n;

	for(int i = 0; i < m; i++)
		for(int j = 0; j < n; j++) {
			cout << "a[" << i << "][" << j << "] = ";
			cin >> a[i][j];
		}


	/*
	 *
	 * Транспониране на матрица

	for(int i = 0; i < m-1; i++)
		for(int j = i+1; j < n; j++) {
			int x = a[i][j];
			a[i][j] = a[j][i];
			a[j][i] = x;
		}

		*/
	// За домашно: за правоъгълна

	for(int j = 0; j < n; j++) {
		// за всеки стълб
		// трябва да намерим сумата му
		int s = 0;
		for(int i = 0; i < m; i++)
			s += a[i][j];
		cout << "S[" << j << "] = " << s << endl;
	}

	cout << "По редове:" << endl;
	for(int i = 0; i < m; i++) {
		for(int j = 0; j < n; j++)
			cout << a[i][j] << '\t';
		cout << endl;
	}

	int x;
	cout << "x = "; cin >> x;
	// всички редове, в които x се среща
	for(int i = 0; i < m; i++) {
		int j = 0;
		while (j < n && a[i][j] != x)
			j++;
		// да - a[i][j] == x
		// не - j == n
		if (j < n)
			cout << x << " се среща в ред " << i << endl;
	}

	int p = 1;
	for(int j = 0; j < n; j++) {
		int min = a[0][j];
		for(int i = 1; i < m; i++)
			if (a[i][j] < min)
				min = a[i][j];
		p *= min;
	}

	cout << "p = " << p << endl;

	for(int k = 0; k < n; k++) {
		// обхождаме k-ти диагонал
		// т.е. такива i, j, ,така че j - i == k
		for(int i = 0; i < n-k; i++)
			cout << a[i][i+k] << endl;
	}

	/*
	cout << "По стълбове:" << endl;
	for(int j = 0; j < n; j++) {
		for(int i = 0; i < m; i++)
			cout << a[i][j] << '\t';
		cout << endl;
	}

	int c[4][5] = { { 1, 2}, {3, 4, 5, 6}, {7, 8, 9}, {10} };
	for(int i = 0; i < 4; i++) {
			for(int j = 0; j < 5; j++)
				cout << c[i][j] << '\t';
			cout << endl;
		}
*/
	int b[MAX][MAX], c[MAX][MAX];

	for(int i = 0; i < m; i++)
		for(int j = 0; j < n; j++) {
			cout << "b[" << i << "][" << j << "] = ";
			cin >> b[i][j];
		}

	// тук се случва магия
	for(int i = 0; i < m; i++)
		for(int j = 0; j < n; j++)
			if (i % 2 == j % 2)
				c[i][j] = a[i][j];
			else
				c[i][j] = b[i][j];

	for(int i = 0; i < m; i++) {
		for(int j = 0; j < n; j++)
			cout << c[i][j] << '\t';
		cout << endl;
	}

	return 0;
}