# 0J/QsNGA0YXQvtC80LXQvdC60L4g
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
def spiral_matrix(rows, cols):
matrix = [[0] * cols for _ in range(rows)]
num = 1
left, right, top, bottom = 0, cols - 1, 0, rows - 1
while left <= right and top <= bottom:
for j in range(left, right + 1):
matrix[top][j] = num
num += 1
top +=1
for i in range(top, bottom + 1):
matrix[i][right] = num
num += 1
right -= 1
if top <= bottom:
for j in range(right, left -1, -1):
matrix[bottom][j] = num
num += 1
bottom -= 1
if left <= right:
for i in range(bottom, top -1, -1):
matrix[i][left] = num
num += 1
return matrix
rows = 30
cols = 30
matrix = spiral_matrix(rows, cols)
new_matrix = [[1 if is_prime(num) else 0 for num in row] for row in matrix]
print("\nmatrix")
for row in new_matrix:
print(*row)
IyAwSi9Rc05HQTBZWFF2dEM4MExYUXZkQzYwTDRnCmRlZiBpc19wcmltZShuKToKICAgIGlmIG4gPCAyOgogICAgICAgIHJldHVybiBGYWxzZQogICAgZm9yIGkgaW4gcmFuZ2UoMiwgaW50KG4qKjAuNSkgKyAxKToKICAgICAgICBpZiBuICUgaSA9PSAwOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgIHJldHVybiBUcnVlCiAKIApkZWYgc3BpcmFsX21hdHJpeChyb3dzLCBjb2xzKToKICAgIG1hdHJpeCA9IFtbMF0gKiBjb2xzIGZvciBfIGluIHJhbmdlKHJvd3MpXQogICAgbnVtID0gMQogICAgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tID0gMCwgY29scyAtIDEsIDAsIHJvd3MgLSAxCiAKICAgIHdoaWxlIGxlZnQgPD0gcmlnaHQgYW5kIHRvcCA8PSBib3R0b206CiAgICAgICAgZm9yIGogaW4gcmFuZ2UobGVmdCwgcmlnaHQgKyAxKToKICAgICAgICAgICAgbWF0cml4W3RvcF1bal0gPSBudW0KICAgICAgICAgICAgbnVtICs9IDEKICAgICAgICB0b3AgKz0xCiAKIAogCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UodG9wLCBib3R0b20gKyAxKToKICAgICAgICAgICAgbWF0cml4W2ldW3JpZ2h0XSA9IG51bQogICAgICAgICAgICBudW0gKz0gMQogICAgICAgIHJpZ2h0IC09IDEKIAogCiAgICAgICAgaWYgdG9wIDw9IGJvdHRvbToKICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UocmlnaHQsIGxlZnQgLTEsIC0xKToKICAgICAgICAgICAgICAgIG1hdHJpeFtib3R0b21dW2pdID0gbnVtCiAgICAgICAgICAgICAgICBudW0gKz0gMQogICAgICAgICAgICBib3R0b20gLT0gMQogCiAKICAgICAgICBpZiBsZWZ0IDw9IHJpZ2h0OgogICAgICAgICAgICBmb3IgaSBpbiByYW5nZShib3R0b20sIHRvcCAtMSwgLTEpOgogICAgICAgICAgICAgICAgbWF0cml4W2ldW2xlZnRdID0gbnVtCiAgICAgICAgICAgICAgICBudW0gKz0gMQogCiAgICByZXR1cm4gbWF0cml4CiAKcm93cyA9IDMwCmNvbHMgPSAzMAogCm1hdHJpeCA9IHNwaXJhbF9tYXRyaXgocm93cywgY29scykKbmV3X21hdHJpeCA9IFtbMSBpZiBpc19wcmltZShudW0pIGVsc2UgMCBmb3IgbnVtIGluIHJvd10gZm9yIHJvdyBpbiBtYXRyaXhdCnByaW50KCJcbm1hdHJpeCIpCmZvciByb3cgaW4gbmV3X21hdHJpeDoKICAgIHByaW50KCpyb3cp