from typing import List


def generate_pauli_strings_from_povm_name(povm_name: str) -> List[str]:
    """Generates Pauli strings from given POVM name to construct a tomographical experiment.

    Parameters
    ----------
    povm_name: str
        Name of a POVM which is the target of the experiment.

    Returns
    -------
    List[str]
        List of Pauli strings for observation that covers sufficient information of the given POVM.
    """
    initial_string = "".join(povm_name.split("_")).upper()
    allowed_chars = set("XYZ")
    assert 0 < len(initial_string)
    assert set(initial_string) <= allowed_chars
    swap_times = 2 ** len(initial_string)
    pauli_strings = [initial_string]
    for i in range(1, swap_times):
        swap_position = f"{i:0{len(initial_string)}b}"
        pauli_str = ""
        for c, swap_flag in zip(initial_string, swap_position):
            if swap_flag == "1":
                pauli_str = pauli_str + "I"
            else:
                pauli_str = pauli_str + c
        pauli_strings.append(pauli_str)
    return pauli_strings