The actual problem is you only have one list. If you want to find more than one word you need a list of lists:

```
if event.key == pygame.K_RETURN:
for cell in grid.cells:
lstlst = [[cell]]
grid.adj(cell, 1, lstlst, word)
for lst in lstlst:
if ''.join([c.text for c in lst]) == word:
print("FOUND")
```

When a new character is identified, you need to copy the last list of the list of lists:

```
taillst = lstlst[-1]
```

```
lst = taillst[:]
```

Append the new cell to the copy and add the copy to the end of the list of lists:

```
lst.append(cell)
lstlst.append(lst)
```

Do not increment `idx`

, but pass `idx + 1`

to the next recursion level:

```
self.adj(cell, idx+1, lstlst, wrd)
```

Complete method `adj`

:

```
class Grid():
# [...]
def adj(self, cell, idx, lstlst, wrd):
x, y = self.cells.index(cell) // self.rows, self.cells.index(cell) % self.rows
y1 = x - 1 if x else 0
y2 = self.rows + 2 if x > self.rows + 2 else x + 2
x1 = y - 1 if y else 0
x2 = self.cols + 2 if y > self.cols + 2 else y + 2
adjs = [cell for row in self.grid[y1:y2] for cell in row[x1:x2] if cell != self.grid[x][y]]
taillst = lstlst[-1]
for cell in adjs:
if len(wrd) > idx:
if cell.text == wrd[idx]:
lst = taillst[:]
lst.append(cell)
lstlst.append(lst)
self.adj(cell, idx+1, lstlst, wrd)
```

The following pattern

returns the following 6 lists with 3 matches:

```
['C']
['C', 'A']
['C', 'A', 'T']
['C', 'A', 'T']
['C', 'A']
['C', 'A', 'T']
```

CLICK HERE to find out more related problems solutions.