1.
/**
* Angewandte Mathematik, SS11
* Problem: 11170 Cos(NA)
* Link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=23&page=show_problem&problem=2111
*
* @author Peter Weismann
* @author Pirmin Schneider
* @version 1.0, 06/06/2011
*
* Method : Ad-Hoc
* Status : Accepted
* Runtime: 0.136
*/

import java.util.Scanner;
public class Main {
// Diese Variable wird verwendet, um beim Ausgeben des ersten Glieds kein + auszugeben
// D.h. anstatt von +Cos(A) wird Cos(A) ausgegeben
// Dies erledigt eine if-Abfrage im
static boolean firstSign = false;

public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// N bei Cos(NA)
int N;
// Koeffizientenarray
long[] coeff;


while (input.hasNext()) {
N = input.nextInt();
coeff = new long[N+1];
firstSign = false;

// Abbruchbedingung
if (N == 0)
break;

/**
* Berechnet das Polynom und speichert es in das coeff-Array
* Der Index des Arrays gibt die Potenz und der Inhalt den Koeffizienten an
* Formel: Summe (k = 0 bis n/2) (-1)^k * binomialCoefficient(n, 2k) * (sin(x))^2k * (cos x)^(n-2k))
* (sin(x))^2k = (1 - (cos(x))2)^k Dieser Ausdruck kann mit dem binomischen Lehrsatz in eine Summe umgeformt
* und in die ersten Formel eingesetzt werden. Damit kommt man auf die folgende Formel
* Quelle1: http://mathworld.wolfram.com/Multiple-AngleFormulas.html
* Quelle2: http://de.wikipedia.org/wiki/Binomischer_Lehrsatz
*/
for (int k = 0; k <= N/2; k++) {
for (int s = 0; s <= k; s++) {
coeff[(N - 2*k) + 2*s] += (long)Math.pow(-1, k) * binomialCoefficient(N, 2*k) * binomialCoefficient(k, s) * (long)Math.pow(-1, s);
}
}

// Ausgabe des Polynoms
for (int i = coeff.length - 1; i >= 0; i--) {
// Falls der Koeffizient ungleich 0 und 1 ist
if (coeff[i] != 0 && coeff[i] != 1) {
// Ausgabe bei Potenzen p != 0
if (i != 0) {
// Ausgabe bei 1er Potenzen
if (i == 1)
System.out.println(getSign(coeff[i])+Math.abs(coeff[i])+"Cos(A)");
// Ausgabe bei sonstigen Potenzen
else
System.out.print(getSign(coeff[i])+(long)Math.abs(coeff[i])+"Cos^"+i+"(A)");
}
// Ausgabe bei 0er Potenzen (x0 = 1)
else if (i == 0)
System.out.println(getSign(coeff[i])+Math.abs(coeff[i]));

}
// Falls der Koeffizient 1 ist, wird die eins nicht ausgegeben (1Cos(A) = Cos(A))
else if (Math.abs(coeff[i]) == 1) {
// Ausgabe bei Potenzen p != 0
if (i != 0) {
// Ausgabe bei 1er Potenzen
if (i == 1)
System.out.println(getSign(coeff[i])+"Cos(A)");
// Ausgabe bei sonstigen Potenzen
else
System.out.print(getSign(coeff[i])+"Cos^"+i+"(A)");
}
// Ausgabe bei 0er Potenzen (x0 = 1)
else if (i == 0)
System.out.println(getSign(coeff[i])+Math.abs(coeff[i]));
}

}
}
}


/**
* Berechnet den Binomialkoeffizienten
*/
public static long binomialCoefficient(int n, int k) {
long bin = 1;
int m = n - k;

if (k < m) {
k = m;
}

for (int i = n, j = 1; i > k; i--, j++) {
bin = bin * i / j;
}

return bin;
}

/**
* Gibt das Vorzeichen einer Zahl als String zurück
* Wenn das erste Vorzeichen + ist, wird dies nicht ausgegeben
*/
static String getSign( long d ) {
if (firstSign)
return d < 0 ? "-" : "+";
else {
firstSign = true;
return d < 0 ? "-" : "";
}
}

}