struct Node { var x, y, dist: Int init(_ x: Int, _ y: Int, _ dist: Int) { self.x = x self.y = y self.dist = dist } } struct Deque { var enqueue: [Node] = [] var dequeue: [Node] = [] func isEmpty() -> Bool { return enqueue.isEmpty && dequeue.isEmpty } mutating func push(_ node: Node) { enqueue.append(node) } mutating func pop() -> Node? { if dequeue.isEmpty { dequeue = enqueue.reversed() enqueue.removeAll() } return dequeue.popLast() } } func biteFish(of filed: [[Int]], _ shark: (x: Int, y: Int, size: Int)) -> Node? { let N = filed.count var visited = Array(repeating: Array(repeating: false, count: N), count: N) var qu = Deque() visited[shark.y][shark.x] = true qu.push(Node(shark.x, shark.y, 0)) var result: [Node] = [] while !qu.isEmpty() { if let current = qu.pop() { let cx = current.x let cy = current.y let cd = current.dist if filed[cy][cx] != 0 && filed[cy][cx] < shark.size { result.append(Node(cx, cy, cd)) } for (nx, ny) in [(cx, cy-1), (cx-1, cy), (cx+1, cy), (cx, cy+1)] { if 0<=nx && nx