In a simplified Meta Messenger map, a 2D grid represents water and land, where '1' is land and '0' is water. Count how many distinct islands exist.
An island is a group of horizontally or vertically adjacent land cells. Cells connected diagonally do not belong to the same island.
Write a function that takes grid, a list of lists of single-character strings ('0' or '1'), and returns an integer: the number of islands.
def num_islands(grid):