```python
def parse_span(text: str) -> int:
    if not text or '  ' in text:
        raise ValueError("Invalid span format")
    
    units_map = {'yd': 36 * 12, 'ft': 12, 'in': 1}
    parts = text.split()
    total_inches = 0
    
    for part in parts:
        value, unit = part[:-2], part[-2:]
        if not value.isdigit() or unit not in units_map:
            raise ValueError("Invalid span format")
        
        value = int(value)
        total_inches += value * units_map[unit]
    
    return total_inches

def format_span(inches: int) -> str:
    if inches < 0 or not isinstance(inches, int):
        raise ValueError("Invalid number of inches")
    
    yards = inches // (36 * 12)
    inches -= yards * 36 * 12
    feet = inches // 12
    inches -= feet * 12
    
    parts = []
    if yards:
        parts.append(f"{yards}yd")
    if feet:
        parts.append(f"{feet}ft")
    if inches:
        parts.append(f"{inches}in")
    
    return ' '.join(parts) or "0in"

def add_spans(first: str, second: str) -> str:
    if not (isinstance(first, str) and isinstance(second, str)):
        raise ValueError("Both inputs must be strings")
    
    return format_span(parse_span(first) + parse_span(second))
```