Magnus decided to play a classic chess game. Though what he saw in his locker shocked him! His favourite chessboard got broken into 4 pieces, each of size n by n, n is always odd. And what's even worse, some squares were of wrong color. j-th square of the i-th row of k-th piece of the board has color ak, i, j; 1 being black and 0 being white. 

Now Magnus wants to change color of some squares in such a way that he recolors minimum number of squares and obtained pieces form a valid chessboard. Every square has its color different to each of the neightbouring by side squares in a valid board. Its size should be 2n by 2n. You are allowed to move pieces but not allowed to rotate or flip them.

Input

The first line contains odd integer n (1 ≤ n ≤ 100) — the size of all pieces of the board. 

Then 4 segments follow, each describes one piece of the board. Each consists of n lines of n characters; j-th one of i-th line is equal to 1 if the square is black initially and 0 otherwise. Segments are separated by an empty line.

Output

Print one number — minimum number of squares Magnus should recolor to be able to obtain a valid chessboard.

Examples

Input

1
0

0

1

0


Output

1


Input

3
101
010
101

101
000
101

010
101
011

010
101
010


Output

2
import bisect
import math
import itertools
import sys

# import sys.stdout.flush() use for interactive problems
alpha = 'abcdefghijklmnopqrstuvwxyz'
inf = 1e17


# Max = 10**6
# primes = []
# prime = [True for i in range(10**6+1)]
# p = 2
# while (p * p <= Max+1):
#
#     # If prime[p] is not
#     # changed, then it is a prime
#     if (prime[p] == True):
#
#         # Update all multiples of p
#         for i in range(p * p, Max+1, p):
#             prime[i] = False
#     p += 1
#
# for p in range(2, Max+1):
#     if prime[p]:
#         primes.append(p)
def calc1(grid):
    l = len(grid)
    cnt = 0
    for i in range(l):
        for j in range(l):
            if (i+j) % 2 and grid[i][j]:
                cnt += 1
            if (i+j) % 2 == 0 and grid[i][j] == 0:
                cnt += 1
    return cnt

def calc2(grid):
    l = len(grid)
    cnt = 0
    for i in range(l):
        for j in range(l):
            if (i+j) % 2 and grid[i][j] == 0:
                cnt += 1
            if (i+j) % 2 == 0 and grid[i][j]:
                cnt += 1
    return cnt
def solve(n,grids):
    one = []
    zero = []
    for grid in grids:
        one.append(calc1(grid))
        zero.append(calc2(grid))
    take = [3,5,6,9,10,12]
    answer = inf
    for mask in range(16):
        cnt = 0
        if mask not in take:
            continue
        if mask in take:
            if mask & 1:
                cnt += one[3]
                pass
            else:
                cnt += zero[3]
                pass
            if mask & 2:
                cnt += one[2]
                pass
            else:
                cnt += zero[2]
                pass
            if mask & 4:
                cnt += one[1]
                pass
            else:
                cnt += zero[1]
                pass
            if mask & 8:
                cnt += one[0]
                pass
            else:
                cnt += zero[0]
                pass
        answer = min(answer,cnt)
    return answer

t = 1#int(input())
ans = []
for _ in range(t):
    n = int(input())
    #n, u, r, d, l = map(int, input().split())
    #a,b = map(int, input().split())
    # s = input()
    # arr = list(input())
    # arr = [int(x) for x in input().split()]
    # c = [int(x) for x in input().split()]

    # b = [int(x) for x in input().split()]
    # s = input()
    # t = input()
    grids = []
    for i in range(4):
        grid = []
        for j in range(n):
            arr = list(map(int,list(input())))
            grid.append(arr)
        if i != 3:
            s = input()
        grids.append(grid)
    # options = [int(x) for x in input().split()]
    """ladders = []
    for j in range(l):
        ladders.append([int(x) for x in input().split()])"""
    """queries = []
    for j in range(q):
        queries.append(list(map(int, input().split())))"""
    # s = list(input())
    # start,end = map(int,input().split())

    ans.append(solve(n,grids))

for test in ans:
    print(test)