from typing import List
from typing import Tuple


def cnf_rep_to_text(cnf_rep: List[List[Tuple[str, bool]]]) -> str:
    """
    Converts a CNF representation to a text.

    :param cnf_rep: The CNF representation to convert.
    :return: The text representation of the CNF.
    """

    lines = []
    for sentence in cnf_rep:
        sentence_str = ''
        first_in_clause = True
        for atom in sentence:
            if first_in_clause:
                first_in_clause = False
            else:
                sentence_str += ' '
            if atom[1]:
                sentence_str += atom[0]
            else:
                sentence_str += '!' + atom[0]
        lines.append(sentence_str)
    return '\n'.join(lines)