In this HackerRank Flipping the Matrix problem solution you have given the initial configurations for Q matrices, help Sean reverse the rows and columns of each matrix in the best possible way so that the sum of the elements in the matrix's upper-left quadrant is maximal.

## Problem solution in Python.

```import math
q = int(input().strip())

for a0 in range(q):
n = int(input().strip())
a =[[0 for j in range(2*n)] for i in range(2*n)]

for x in range(2 * n):
c = [int(c_temp) for c_temp in input().strip().split(' ')]
a[x] = c

v = 0
for i in range(n):
for j in range(n):
l = []
l.append(a[i][j]) # current matrix
l.append(a[2 * n - 1 - i][j])  # bottom left
l.append(a[i][2 * n - 1- j]) # top right
l.append(a[2* n - 1 - i][2 * n - 1- j]) # bottom right

maxv = max(l)
#print(l)
#print(max(l))

v += maxv

print(v)
```

{"mode":"full","isActive":false}

## Problem solution in Java.

```import java.io.*;
import java.util.*;

public class Solution {

public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
Scanner in = new Scanner(System.in);
int queries = in.nextInt();
int size = 0;
int length;
int total;
for(int i = 0; i < queries; i++){
total = 0;
size = in.nextInt();
length = size * 2;
int[][] matrix = new int[length][length];
for(int row = 0; row < length; row++){
for(int column = 0; column < length; column++){
matrix[column][row] = in.nextInt();
}
}
int max = 0;
for(int row = 0; row < size; row++){
for(int column = 0; column < size; column++){
max = Integer.MIN_VALUE;
if(matrix[row][column] > max)
max = matrix[row][column];
if(matrix[row][length - column - 1] > max)
max = matrix[row][length - column - 1];
if(matrix[length - row - 1][column] > max)
max = matrix[length - row - 1][column];
if(matrix[length - row - 1][length - column - 1] > max)
max = matrix[length - row - 1][length - column - 1];
total += max;
}
}
System.out.println(total);
}
}
}```

{"mode":"full","isActive":false}

## Problem solution in C++.

```#include <cstdio>
#include <cassert>
#include <algorithm>
using namespace std;

const int MAXN = 300;

int matrix[MAXN][MAXN];

void Work() {
int n;
assert(scanf("%d", &n) == 1);
int halfn = n;
n *= 2;

for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
assert(scanf("%d", &matrix[i][j]) == 1);
}
}

int ans = 0;
for (int i = 0; i < halfn; ++i) {
for (int j = 0; j < halfn; ++j) {
int t_max = matrix[i][j];
int ti = i;
int tj = j;

ti = n - 1 - ti;
t_max = max(t_max, matrix[ti][tj]);

tj = n - 1 - tj;
t_max = max(t_max, matrix[ti][tj]);

ti = n - 1 - ti;
t_max = max(t_max, matrix[ti][tj]);

ans += t_max;
}
}
printf("%d\n", ans);
}

int main() {
int q;
assert(scanf("%d", &q) == 1);
while (q--) {
Work();
}
return 0;
}
```

{"mode":"full","isActive":false}

## Problem solution in C.

```#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int maxm(int a,int b,int c,int d){
int max;
if(a>=b && a>=c && a>=d){
max=a;
}
else if(a<=b && b>=c && b>=d)
max=b;
else if(c>=b && a<=c && c>=d)
max=c;
else
max=d;
return max;
}
int main() {
int q;
scanf("%d",&q);
while(q--){
int n,i,j;
scanf("%d",&n);
int x[2*n][2*n];
for(i=0;i<2*n;i++){
for(j=0;j<2*n;j++)
scanf("%d",&x[i][j]);
}
int m=2*n;
int sum=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
sum+=maxm(x[i][j],x[i][m-1-j],x[m-1-i][j],x[m-1-i][m-1-j]);
}
}
printf("%d\n",sum);
}

/* Enter your code here. Read input from STDIN. Print output to STDOUT */
return 0;
}
```

{"mode":"full","isActive":false}