```python
def thaw_row(row: str, steps: int) -> str:
    """
    Melt ice cells in a row of cells written as "#" for ice and "." for meltwater,
    given a count of thaw steps. Each step happens everywhere at once: an ice cell melts
    into "." when it stands at either end of the row or has meltwater directly beside it,
    while an ice cell walled in by ice on both sides survives the step.
    
    :param row: A string representing the row of cells, containing only "#" and ".".
    :param steps: An integer representing the number of thaw steps to perform.
    :return: The row after exactly that many steps.
    """
    if not isinstance(row, str) or not row:
        raise ValueError("Row must be a non-empty string.")
    
    if not all(c in "#." for c in row):
        raise ValueError("Row must contain only '#' and '.' characters.")
    
    if not isinstance(steps, int) or steps < 0:
        raise ValueError("Steps must be a non-negative integer.")
    
    for _ in range(steps):
        new_row = []
        for i, cell in enumerate(row):
            if (i == 0 or row[i - 1] == '.') and (cell == '#' or (i + 1 < len(row) and row[i + 1] == '.')):
                new_row.append('.')
            else:
                new_row.append(cell)
        row = ''.join(new_row)
    
    return row
```