def painterBot(canvas, operations, d):
    N, M = len(canvas), len(canvas[0])

    def flood(x, y, color):
        S = [(x, y)]
        visited = set([(x, y)])
        init_color = canvas[x][y]
        while S:
            x, y = S.pop()
            canvas[x][y] = color
            for dx, dy in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
                if 0 <= x+dx < N and 0 <= y+dy < M \
                and (x+dx, y+dy) not in visited \
                and abs(canvas[x+dx][y+dy] - init_color) <= d:
                    S.append((x+dx, y+dy))
                    visited.add((x+dx, y+dy))

    for x, y, color in operations:
        flood(x, y, color)
    return canvas
