import sys
sys.stdin=open("input.txt", "r")
dirs = ([-1,0],[0,-1],[1,0],[0,1])
# cDir = [
#     [],
#     [[[-1,0]],[[0,-1]],[[1,0]],[[0,1]]],
#     [[[-1,0],[1,0]],[[0,-1],[0,1]]],
#     [],
#     [[[-1,0],[0,-1],[1,0]],[[0,-1],[1,0],[0,1]],[[-1,0],[1,0],[0,1]],[[-1,0],[0,-1],[0,1]]]
# ]
cDir = [
    [],
    [[0],[1],[2],[3]],
    [[0,2], [1,3]],
    [[0,1],[1,2],[2,3],[3,0]],
    [[0,1,2],[1,2,3],[2,3,0],[3,0,1]]
]
def deepcopy(arr):
    return [[cols for cols in raws] for raws in arr]
def dfs(ptr,pos,zCnt, board):
    global ans
    cBoard = deepcopy(board)
    cnt=zCnt
    if ptr ==len(pos):
        ans = min(ans, zCnt)
        return
    cctv = pos[ptr]
    cctvDir = cDir[cBoard[cctv[0]][cctv[1]]]
    for arw in cctvDir:
        for d in arw:
            nPos=cctv
            while True:
                nPos = [nPos[0]+dirs[d][0], nPos[1]+dirs[d][1]]
                if not (0<=nPos[0]<N and 0<=nPos[1]<M and cBoard[nPos[0]][nPos[1]]!=6):
                    break
                if not (cBoard[nPos[0]][nPos[1]]):
                    cBoard[nPos[0]][nPos[1]]=7
                    cnt-=1
        dfs(ptr+1, pos, cnt, cBoard)
        cBoard = deepcopy(board)
        cnt=zCnt
if __name__=="__main__":
    N ,M = map(int, input().split())
    cPos =[]
    num5=[]
    board= []
    zCnt =0
    for i in range(N):
        A = list(map(int ,input().split()))
        for j in range(M):
            if 0<A[j]<5:
                cPos.append([i,j])
            elif A[j]==5:
                num5.append([i,j])
            elif A[j]==0:
                zCnt+=1
        board +=[A]

    print(*board, sep='\n')
    print(cPos)
    print(zCnt)

    if len(num5)!=0:
        for r,c in num5:
            for d in dirs:
                nPos =[r,c]
                while True:
                    nPos = [nPos[0]+d[0], nPos[1]+d[1]]
                    if not (0<=nPos[0]<N and 0<=nPos[1]<M and board[nPos[0]][nPos[1]]!=6):
                        break

                    if not (board[nPos[0]][nPos[1]]):
                        board[nPos[0]][nPos[1]]=7
                        zCnt-=1
    print(*board, sep='\n')
    print(zCnt)

    ans = float('inf')
                        
    dfs(0,cPos,zCnt, board)

    print(ans)

            

_________________________________________________________________________________________________________________________________________________________________

import sys
from copy import deepcopy

sys.stdin =open("input.txt", "r")

dirs = [[-1,0],[0,-1],[1,0],[0,1]]

cDir = [
        [],
        [[0],[1],[2],[3]],
        [[0,2],[1,3]],
        [[0,1],[1,2],[2,3],[3,0]],
        [[0,1,2],[1,2,3],[2,3,0],[3,0,1]],
        [[0,1,2,3]]
]

def watch(cBoard, r,c,i,N,M):
    for l in i:
        row = r
        col = c
        # print(i)
        # print(l)
        while True:
            row += dirs[l][0]
            col += dirs[l][1]
            if (0<=row<N and 0<=col<M and cBoard[row][col]!=6):
                cBoard[row][col]=7
            else:
                break
    return cBoard

def dfs(depth, cctv, ans, board,N,M):
    
    if (depth == len(cctv)):
        cnt =0
        for i in range(len(board)):
            cnt+=board[i].count(0)
        ans = min(cnt, ans)
        return ans
    
    cBoard = deepcopy(board)
    num , r, c = cctv[depth]

    for i in cDir[num]:
        cBoard = watch(cBoard, r, c, i, N,M)
        ans = dfs(depth+1, cctv, ans, cBoard,N,M)
        cBoard = deepcopy(board)

    return ans
if __name__=="__main__":

    N,M = map(int, input().split())

    cctv=[]
    board=[]

    ans =0

    for i in range(N):
        A=list(map(int, input().split()))
        for j in range(len(A)):
            if A[j]==0:
                ans+=1
            elif A[j]!=6:
                cctv+=[[A[j],i,j]]
        board+=[A]
        
    # print(cctv)
    # print(*board, sep='\n')
    # print(ans)

    ans = dfs(0, cctv, ans, board,N,M)

    print(ans)


______________________________________________________________________________________________________________________________________________________________
import sys

sys.stdin=open("input.txt", "r")
dirs = ([0,1],[-1,0],[0,-1],[1,0])
gen=[0]*11
gen[0]=[0]
for a in range(1,11):
    gen[a]=gen[a-1]+list(map(lambda x: (x+1)%4, reversed(gen[a-1])))
if __name__=="__main__":

    N = int(input())
    M=101
    # drag = [list(map(int, input().split())) for _ in range(N)]
    board = [[0]*M for _ in range(M)]
    dragon =[]
    for _ in range(N):
        x,y,d,g = map(int, input().split())
        dragon.append([y,x,d,g])
    for dra in dragon:
        # print("dra",dra[3])
        # print("g",g)
        # print(g[dra[3]])
        A = list(map(lambda x: (x+dra[2])%4, gen[dra[3]]))
        pos = [dra[0], dra[1]]
        board[pos[0]][pos[1]]=1
        for d in A:
            pos = [pos[0]+dirs[d][0], pos[1]+dirs[d][1]]
            board[pos[0]][pos[1]]=1
    ans = 0
    for r in range(M):
        for c in range(M):
            if board[r][c]:
                if board[r+1][c] and board[r][c+1] and board[r+1][c+1]:
                    ans+=1
    print(ans)

    