```
def region_totals(grid: list, queries: list) -> list:
    if not grid or not grid[0]:
        raise ValueError("Grid must have at least one row and one column")
    
    rows, cols = len(grid), len(grid[0])
    for row in grid:
        if len(row) != cols:
            raise ValueError("All rows must have the same number of columns")
        for cell in row:
            if not isinstance(cell, int):
                raise ValueError("All cells must be integers")

    prefix_sum_table = [[0] * (cols + 1) for _ in range(rows + 1)]
    for r in range(1, rows + 1):
        for c in range(1, cols + 1):
            prefix_sum_table[r][c] = grid[r-1][c-1] + prefix_sum_table[r-1][c] + prefix_sum_table[r][c-1] - prefix_sum_table[r-1][c-1]

    results = []
    for top, left, bottom, right in queries:
        if not (isinstance(top, int) and isinstance(left, int) and isinstance(bottom, int) and isinstance(right, int)):
            raise ValueError("Query must be a list of exactly four integers")
        if top < 0 or top >= rows or bottom <= top:
            raise ValueError("Invalid query: top must be strictly less than bottom")
        if left < 0 or left >= cols or right <= left:
            raise ValueError("Invalid query: left must be strictly less than right")
        
        result = prefix_sum_table[bottom][right] - prefix_sum_table[top][right] - prefix_sum_table[bottom][left] + prefix_sum_table[top][left]
        results.append(result)
    
    return results
```