Iterate through all cells of the grid using nested loops and the indexes (*i*, *j*):

```
for i in range(len(squares)):
for j in range(len(squares[i])):
# [...]
```

Find all the adjacent index tuples (*l*, *k*) of a cell (*i*, *j*):

```
adjacent = []
for k in range(max(0,i-1), min(len(squares), i+2)):
for l in range(max(0,j-1), min(len(squares[k]), j+2)):
if i != k or j != l:
adjacent.append((k, l))
```

Change the color of a cell if a cell (*i*, *j*) doesn’t have a neighbor (`not any()`

) (*l*, *k*) where the difference is at least 2:

```
if not any((k, l) for (k, l) in adjacent if abs(squares[i][j].num - squares[k][l].num) > 1):
squares[i][j].color = (140, 140, 140)
```

Complete nested loop

```
while True:
# [...]
for i in range(len(squares)):
for j in range(len(squares[i])):
adjacent = []
for k in range(max(0,i-1), min(len(squares), i+2)):
for l in range(max(0,j-1), min(len(squares[k]), j+2)):
if i != k or j != l:
adjacent.append((k, l))
if not any((k, l) for (k, l) in adjacent if abs(squares[i][j].num - squares[k][l].num) > 1):
squares[i][j].color = (140, 140, 140)
elif squares[i][j].color == (140, 140, 140):
square.clear()
for row in squares:
for square in row:
square.draw()
# [...]
```

CLICK HERE to find out more related problems solutions.