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 java.util.*;
import java.io.*;
import java.math.*;
public class cf
{
    static int arr[][];
    
    public static void main(String args[])throws IOException
    {
        PrintWriter out=new PrintWriter(System.out);
        Reader sc=new Reader();
        int n=sc.nextInt();
        int arr1[][][]=new int[4][n][n];
        arr=new int[2*n][2*n];
        for(int i=0;i<n;i++)
        {
            String s=sc.next();
            for(int j=0;j<n;j++)
            arr1[0][i][j]=s.charAt(j)-48;
        }
        for(int i=0;i<n;i++)
        {
            String s=sc.next();
            for(int j=0;j<n;j++)
            arr1[1][i][j]=s.charAt(j)-48;
        }
        for(int i=0;i<n;i++)
        {
            String s=sc.next();
            for(int j=0;j<n;j++)
            arr1[2][i][j]=s.charAt(j)-48;
        }
        for(int i=0;i<n;i++)
        {
            String s=sc.next();
            for(int j=0;j<n;j++)
            arr1[3][i][j]=s.charAt(j)-48;
        }
        int ans=1000000000;
        int counter=0;
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<4;j++)
            {
                for(int k=0;k<4;k++)
                {
                    for(int l=0;l<4;l++)
                    {
                        if(i!=j&&i!=k&&i!=l&&j!=k&&j!=l&&k!=l)
                        {
                            for(int x=0;x<n;x++)
                            {
                                for(int y=0;y<n;y++)
                                {
                                    arr[x][y]=arr1[i][x][y];
                                }
                            }
                            for(int x=0;x<n;x++)
                            {
                                for(int y=n;y<2*n;y++)
                                {
                                    arr[x][y]=arr1[j][x][y-n];
                                }
                            }
                            for(int x=n;x<2*n;x++)
                            {
                                for(int y=0;y<n;y++)
                                {
                                    arr[x][y]=arr1[k][x-n][y];
                                }
                            }
                            for(int x=n;x<2*n;x++)
                            {
                                for(int y=n;y<2*n;y++)
                                {
                                    arr[x][y]=arr1[l][x-n][y-n];
                                }
                            }
                            int made[][]=new int[2*n][2*n];
                            int xor=0;
                            for(int x=0;x<2*n;x++)
                            {
                                for(int y=0;y<2*n;y++)
                                {
                                    made[x][y]=xor;
                                    xor^=1;
                                }
                                if((2*n)%2==0)
                                xor^=1;
                            }
                            int count=0;
                            for(int x=0;x<2*n;x++)
                            {
                                for(int y=0;y<2*n;y++)
                                {
                                    if(made[x][y]!=arr[x][y])
                                    count++;
                                }
                            }
                            ans=Math.min(ans,count);
                            made=new int[2*n][2*n];
                            xor=1;
                            for(int x=0;x<2*n;x++)
                            {
                                for(int y=0;y<2*n;y++)
                                {
                                    made[x][y]=xor;
                                    xor^=1;
                                }
                                if((2*n)%2==0)
                                xor^=1;
                            }
                            count=0;
                            for(int x=0;x<2*n;x++)
                            {
                                for(int y=0;y<2*n;y++)
                                {
                                    if(made[x][y]!=arr[x][y])
                                    count++;
                                }
                            }
                            ans=Math.min(ans,count);
                        }
                    }
                }
            }
        }
        System.out.println(ans);
    }
    
    
    
    
    
    static class Reader 
    { 
        private InputStream mIs;
        private byte[] buf = new byte[1024];
        private int curChar,numChars;
        public Reader() { this(System.in); } 
        public Reader(InputStream is) { mIs = is;} 
        public int read() {
            if (numChars == -1) throw new InputMismatchException();    
            if (curChar >= numChars) {
                curChar = 0;
                try { numChars = mIs.read(buf);} catch (IOException e) { throw new InputMismatchException();}
                if (numChars <= 0) return -1;            
            }
            return buf[curChar++];
        } 
        public String nextLine(){
            int c = read();
            while (isSpaceChar(c)) c = read();        
            StringBuilder res = new StringBuilder();
            do {
                res.appendCodePoint(c);
                c = read();
            } while (!isEndOfLine(c));
            return res.toString() ;
        } 
        public String next(){
            int c = read();
            while (isSpaceChar(c)) c = read();        
            StringBuilder res = new StringBuilder();
            do {
                res.appendCodePoint(c);
                c = read();
            }while (!isSpaceChar(c));
            return res.toString();
        } 
        public long nextLong(){
            int c = read();
            while (isSpaceChar(c)) c = read();        
            int sgn = 1;
            if (c == '-') { sgn = -1 ; c = read() ; }
            long res = 0;
            do{
                if (c < '0' || c > '9') throw new InputMismatchException();
                res *= 10 ; res += c - '0' ; c = read();
            }while(!isSpaceChar(c));
            return res * sgn;
        } 
        public int nextInt(){
            int c = read() ;
            while (isSpaceChar(c)) c = read();        
            int sgn = 1;
            if (c == '-') { sgn = -1 ; c = read() ; }
            int res = 0;
            do{
                if (c < '0' || c > '9') throw new InputMismatchException();
                res *= 10 ; res += c - '0' ; c = read() ;
            }while(!isSpaceChar(c));
            return res * sgn;
        } 
        public boolean isSpaceChar(int c) { return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1; } 
        public boolean isEndOfLine(int c) { return c == '\n' || c == '\r' || c == -1; } 
    } 
}