import
java.util.Arrays;
import
java.util.HashMap;
import
java.util.Map;
public
class
MatrixRotationCheck {
public
static
String findRotation(
int
[][] mat,
int
[][] T) {
if
(T.length != mat.length || T[
0
].length != mat[
0
].length) {
return
"No"
;
}
Map<String, Integer> m =
new
HashMap<>();
for
(
int
[] row : mat) {
String rowStr = Arrays.toString(row);
m.put(rowStr, m.getOrDefault(rowStr,
0
) +
1
);
int
[] reversedRow = Arrays.copyOf(row, row.length);
for
(
int
i =
0
, j = row.length -
1
; i < j; i++, j--) {
int
temp = reversedRow[i];
reversedRow[i] = reversedRow[j];
reversedRow[j] = temp;
}
String reversedRowStr = Arrays.toString(reversedRow);
m.put(reversedRowStr, m.getOrDefault(reversedRowStr,
0
) +
1
);
}
for
(
int
j =
0
; j < mat[
0
].length; j++) {
int
[] column =
new
int
[mat.length];
for
(
int
i =
0
; i < mat.length; i++) {
column[i] = mat[i][j];
}
String columnStr = Arrays.toString(column);
m.put(columnStr, m.getOrDefault(columnStr,
0
) +
1
);
int
[] reversedColumn = Arrays.copyOf(column, column.length);
for
(
int
i =
0
, k = column.length -
1
; i < k; i++, k--) {
int
temp = reversedColumn[i];
reversedColumn[i] = reversedColumn[k];
reversedColumn[k] = temp;
}
String reversedColumnStr = Arrays.toString(reversedColumn);
m.put(reversedColumnStr, m.getOrDefault(reversedColumnStr,
0
) +
1
);
}
for
(
int
[] row : T) {
String rowStr = Arrays.toString(row);
if
(m.getOrDefault(rowStr,
0
) <=
0
) {
return
"No"
;
}
m.put(rowStr, m.get(rowStr) -
1
);
}
for
(
int
j =
0
; j < T[
0
].length; j++) {
int
[] column =
new
int
[T.length];
for
(
int
i =
0
; i < T.length; i++) {
column[i] = T[i][j];
}
String columnStr = Arrays.toString(column);
if
(m.getOrDefault(columnStr,
0
) <=
0
) {
return
"No"
;
}
m.put(columnStr, m.get(columnStr) -
1
);
}
return
"Yes"
;
}
public
static
void
main(String[] args) {
int
[][] mat = {
{
1
,
2
,
3
},
{
4
,
5
,
6
},
{
7
,
8
,
9
}
};
int
[][] T = {
{
3
,
6
,
9
},
{
2
,
5
,
8
},
{
1
,
4
,
7
}
};
System.out.println(findRotation(mat, T));
}
}