```python
def expand_nth_weekday(ordinal: int, weekday: int, start: str, months: int) -> list:
    if ordinal not in {-1, 1, 2, 3, 4, 5} or weekday < 0 or weekday > 6:
        raise ValueError("Invalid ordinal or weekday")
    
    if len(start) != 7 or start[:4] not in '0123456789' * 4 or start[4] != '-' or start[5:] not in '0123456789' * 2:
        raise ValueError("Invalid start month")
    
    if months <= 0 or months > 240:
        raise ValueError("Invalid number of months")
    
    year = int(start[:4])
    month = int(start[5:])
    
    if year < 1 or year > 9999 or month < 1 or month > 12:
        raise ValueError("Start month out of range")
    
    result = []
    
    for _ in range(months):
        days_in_month = [31, 28 + (year % 4 == 0 and year % 100 != 0 or year % 400 == 0), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month - 1]
        first_weekday = (year * 365 + year // 4 - year // 100 + year // 400) % 7
        weekday_count = 0
        
        for day in range(1, days_in_month + 1):
            if (first_weekday + day - 1) % 7 == weekday:
                weekday_count += 1
                if ordinal == -1 or weekday_count == abs(ordinal):
                    result.append(f"{year:04d}-{month:02d}-{day:02d}")
        
        month += 1
        if month > 12:
            month = 1
            year += 1
    
    return result
```