import math
import os

# loop programma
esponenti = {'0': '\u2070', '1': '\u00b9', '2': '\u00b2', '3': '\u00b3', '4': '\u2074',
             '5': '\u2075', '6': '\u2076', '7': '\u2077', '8': '\u2078', '9': '\u2079'}
while True:
    n = abs(int(input("Specifica il grado n:\n")))
    real_terms = []  # termini di cos(x)
    iterms = []  # termini di sin(x)

    # for loop con il binomio di Newton
    for k in range(0, n + 1):
        degc = k
        degs = n - k
        coeff = math.comb(n, k)
        c = ''
        tc = ''
        ts = ''

        # gradi e coefficienti nei casi speciali
        if degc == 1:
            tc = 'cos(x)'
        elif degc == 0:
            tc = ''
        elif degc > 1:
            m = list(str(degc))
            l = []
            for i in range(0, len(m)):
                l.append(esponenti[str(m[i])]) #conversione superscript esponente
            exp = "".join(l)
            tc = f'cos{exp}(x)'
        if degs == 1:
            ts = 'sin(x)'
        elif degs == 0:
            ts = ''
        elif degs > 1:
            m = list(str(degs))
            l = []
            for i in range(0, len(m)):
                l.append(esponenti[str(m[i])]) #conversione superscript esponente
            exp = "".join(l)
            ts = f'sin{exp}(x)'

        # cambio di segno del coefficiente in base alla parità dell'esponente di isin(x)
        if (n - k) % 4 == 1:
            if coeff != 1:
                c = str(coeff)
            iterms.append(c + ts + tc)
        elif (n - k) % 4 == 3:
            if coeff != 1:
                c = str(0 - coeff)
            else:
                c = '-'
            iterms.append(c + ts + tc)
        elif (n - k) % 4 == 2:
            if coeff != 1:
                c = str(0 - coeff)
            else:
                c = '-'
            real_terms.append(c + ts + tc)
        else:
            if coeff != 1:
                c = str(coeff)
            real_terms.append(c + ts + tc)

    # ordinamento naturale
    real_terms = reversed(real_terms)
    iterms = reversed(iterms)

    if n == 1:
        print('\ncos(x) = cos(x)')
        print('sin(x) = sin(x)')
    elif n == 0:
        print('\ncos(0) = 1')
        print('sin(0) = 0')
    else:
        print(f'\ncos({n}x) =', *real_terms)
        print(f'sin({n}x) =', *iterms)
    input("\nInvia per pulire lo schermo\n")
    os.system('cls') #syscall
