
첫 번째 줄에는 개의 수를, 두 번째 줄에는 개의 수를, , 번째 줄에는 개의 수를 아래 그림과 같이 배치한 정삼각형 , 가 주어진다. 각 위치에 있는 수는 또는 이다.

당신은 정삼각형을 시계방향 또는 반시계 방향으로 회전시키거나 좌우로 대칭시킬 수 있다.
예를 들어, 위 그림의 정삼각형 를 회전시켜서 얻을 수 있는 정삼각형들은 다음과 같다.

를 대칭시켜서 얻을 수 있는 정삼각형은 다음과 같다.

두 정삼각형의 차이는 두 정삼각형을 겹쳤을 때 값이 다른 위치의 개수이다.
예를 들어, 정삼각형 와 를 겹쳐보면, 두 번째 줄에서 가장 왼쪽, 세 번째 줄에서 가장 왼쪽과 오른쪽에 있는 수들이 다르므로, 와 의 차이는 이 된다.
반면에, 를 반시계 방향으로 회전시킨 삼각형(두 번째 그림에서 오른쪽 삼각형)과 를 겹쳐보면 세 번째 줄에서 왼쪽에서 두 번째에 있는 수들만 다르므로, 이때 정삼각형의 차이는 이 된다.
정삼각형 와 가 주어진다. 당신은 를 원하는 만큼 회전시키고 대칭시킬 수 있다. 물론 를 회전시키거나 대칭시키지 않아도 된다. 또한, 회전시키거나 대칭시킬 수 있는 횟수에는 제한이 없다.
위와 같이 를 회전시키거나 대칭시켜 와 차이가 최소로 나게 하자. 이때 차이가 얼마인지 구하시오.
첫 번째 줄에 , 의 크기 이 주어진다.
두 번째 줄부터 번째 줄까지, 의 각 위치에 있는 수들이 주어진다.
()번째 줄에는 의 번째 줄에 있는 개의 정수가 왼쪽부터 공백을 사이에 두고 순서대로 주어진다.
번째 줄부터 번째 줄까지, 의 각 위치에 있는 수들이 주어진다.
()번째 줄에는 의 번째 줄에 있는
개의 정수가 왼쪽부터 공백을 사이에 두고 순서대로 주어진다.
첫 번째 줄에 를 원하는 만큼 회전, 대칭시켜서 얻을 수 있는 와의 차이의 최솟값을 출력한다.
예제 입력 1
3
0
1 0
1 0 0
0
0 0
0 0 1
예제 출력 1
1
를 반시계 방향으로 돌리면 와 한 곳만 값이 다르게 된다. 이외에도 다양한 방법으로 차이를 로 만들 수 있다.
예제 입력 2
4
0
1 1
1 0 0
1 0 0 0
0
0 0
0 0 1
1 1 1 0
예제 출력 2
0
예제 입력 3
4
0
1 0
0 0 1
1 1 0 0
0
0 1
0 0 0
0 1 1 1
예제 출력 3
2
정삼각형 A를 입력받으면 시계 방향으로 120도 회전, 반 시계 방향으로 120도 회전, 회전한 두 정삼각형과 입력받은 정삼각형을 세개 모두 반전시켜 각각 5개의 변수에 저장하고 정삼각형 B와 XOR 연산으로 6개의 정삼각형들을 비교한 값을 count 변수에 저장하여 가장 작은 값을 출력하였다. 삼각형 A를 5개의 변수에 저장하고 xor을 돌리기에 밑에 코드가 좀 지저분하긴 하지만 답은 올바르게 나온다. 솔직히 내 코드 내가 봐도 변수가 너무 많고 복잡해서 주석을 좀 썼다.

정삼각형 A를 시계 방향으로, 반시계 방향으로 120도 회전시키는건 위와 같이 작동된다. 이중 반복을 사용하여 구현하였다.
A = []
A_1 = [] # 120도 시계 방향
A_1_2 = []
A_2 = [] # 120도 반 시계 방향
A_2_2 = []
A_3 = [] # 대칭
B = []
count = []
N = int(input())
for i in range(N) :
A.append(list(map(int,input().split())))
for i in range(N) :
B.append(list(map(int,input().split())))
for i in range(1,len(A)+1): # 시계방향 대칭
t = []
for j in range(0,len(A)) :
try :
t.insert(0, A[j][-i])
except : pass
A_1.insert(0,t)
for i in range(len(A)): # 반시계방향 대칭
t = []
for j in range(0,len(A)) :
try :
t.append(A[j][i])
except : pass
A_2.insert(0,t)
for i in range(len(A)) : # 시계 방향으로 120 회전 후 대칭
A_1_2.append(A_1[i][::-1])
for i in range(len(A)) : # 반 시계 방향으로 120 회전 후 대칭
A_2_2.append(A_2[i][::-1])
for i in range(len(A)) : # 그냥 대칭
A_3.append(A[i][::-1])
A = sum(A, [])
A_1 = sum(A_1, []) # 시계 120 회전
A_1_2 = sum(A_1_2, []) # 시계 120 회전 후 대칭
A_2 = sum(A_2, []) # 반시계 120 회전
A_2_2 = sum(A_2_2, []) # 반시계 120 회전 후 대칭
A_3 = sum(A_3, []) # 그냥 대칭
B = sum(B, [])
c = 0
for i in range(len(A)) :
c += B[i] ^ A[i]
count.append(c)
c = 0
for i in range(len(A_1)) :
c += B[i] ^ A_1[i]
count.append(c)
c = 0
for i in range(len(A_3)) :
c += B[i] ^ A_1_2[i]
count.append(c)
c = 0
for i in range(len(A_2)) :
c += B[i] ^ A_2[i]
count.append(c)
c = 0
for i in range(len(A_3)) :
c += B[i] ^ A_2_2[i]
count.append(c)
c = 0
for i in range(len(A_3)) :
c += B[i] ^ A_3[i]
count.append(c)
print(min(count))