def dna_strength(seq):
    """Calculates DNA strength
      
    Args:
        seq (str): sequence of A, C, T, G, N with len > 1
    Returns:
        DNA strength (float): normalized by length
    Raises:
        ValueError: if input is None or str shorter than 2 
    
    Citation:   
       Khandelwal et al. 2010. 'A Phenomenological Model for 
       Predicting Melting Temperature of DNA sequences', PLOS ONE
    """
    # Adapted from Table 1 Khandelwal et al (2010).
    # Modified for N-containing di-nucleotide (averaged over possible cases)
    strength_values = {
        "GC": 13,
        "CC": 11,
        "GG": 11,
        "CG": 10,
        "AC": 10,
        "TC": 8,
        "AG": 8,
        "TG": 7,
        "GT": 10,
        "CT": 8,
        "GA": 8,
        "CA": 7,
        "AT": 7,
        "TT": 5,
        "AA": 5,
        "TA": 4,
        "AN": 7.5,
        "CN": 9,
        "GN": 10.5,
        "TN": 6,
        "NA": 6,
        "NC": 10.5,
        "NG": 9,
        "NT": 7.5,
        "NN": 8.25,
    }

    if not seq or len(seq) < 2:
        raise ValueError("Input must be string with 2-nt or longer")

    strength = 0
    for i in range(len(seq) - 1):
        # return 8.25 ('NN'-value) for 2-mer not in the dictionary
        strength = strength + strength_values.get(seq[i : i + 2], 8.25)

    return strength / len(seq)