I was trying to solve the KFORK problem. I have a solution in C++ that I got AC with, but my identical Python3 solution gets an NZEC. I’m new to using Python on CodeChef, so maybe there is something basic I am missing. Can someone please take a look at the following code and see if something is wrong?

```
def is_X_Y_valid(board, X, Y):
return (X >= 0 and X < len(board) and
Y >= 0 and Y < len(board[X]))
T = int(input())
for _ in range(0, T):
N, M = (int(i) for i in input().split())
board = [[False] * N for x in range(N)]
xAttacked = [False] * N
yAttacked = [False] * N
mainDiagAttacked = [False] * (2 * N - 1)
offDiagAttacked = [False] * (2 * N - 1)
for _ in range(0, M):
X, Y = (int(i) for i in input().split())
X -= 1
Y -= 1
board[X][Y] = True
xAttacked[X] = True
yAttacked[Y] = True
mainDiagAttacked[N - 1 + X - Y] = True
offDiagAttacked[X + Y] = True
forkedKnights = 0
for x in range(0, N):
for y in range(0, N):
if board[x][y]:
continue
if (xAttacked[x] or yAttacked[y] or
mainDiagAttacked[N - 1 + x - y] or
offDiagAttacked[x + y]):
continue
attacking = 0
offsets = [[[-2, 2], [-1, 1]], [[-1, 1], [-2, 2]]]
for a, b in offsets:
for i in a:
for j in b:
if is_X_Y_valid(board, x + i, y + j):
if board[x + i][y + j]:
attacking += 1
if attacking >= 2:
forkedKnights += 1
print(forkedKnights)
```