Please solve the programming task below using a self-contained code snippet in a markdown code block.

Given an n x n binary grid, in one step you can choose two adjacent rows of the grid and swap them.
A grid is said to be valid if all the cells above the main diagonal are zeros.
Return the minimum number of steps needed to make the grid valid, or -1 if the grid cannot be valid.
The main diagonal of a grid is the diagonal that starts at cell (1, 1) and ends at cell (n, n).
 
Please complete the following python code precisely:
```python
class Solution:
    def minSwaps(self, grid: List[List[int]]) -> int:
```