Cod sursa(job #399618)

Utilizator toniobFMI - Barbalau Antonio toniob Data 20 februarie 2010 20:00:58
Problema Patrate2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <stdio.h>
#include <cstdlib>
#include <cstring>

const int NR_CIFRE = 1 << 20;

int N, v[NR_CIFRE];

void mul(int B) {
	int i, t = 0;
	for (i = 1; i <= v[0] || t; i++, t /= 10) {
		v[i] = (t += v[i] * B) % 10;
	}
	v[0] = i - 1;
}
/*
void Mmul(int A[], int B[])
{
	int i, j, t, C[NR_CIFRE];
	memset(C, 0, sizeof(C));
	for (i = 1; i <= A[0]; i++)
	{
		for (t=0, j=1; j <= B[0] || t; j++, t/=10)
				C[i+j-1]=(t+=C[i+j-1]+A[i]*B[j])%10;
		if (i + j - 2 > C[0]) C[0] = i + j - 2;
	}
	memcpy(A, C, sizeof(C));
}

void pow (long long p) {
	int a=2;--p;
	for (; p; p >>= 1) {
		if (p&1 == 1) {
			mul(a);
		}
		a *= a;
	}
}
*/
void solve () {
	v[0]=1;v[1]=2;
	if (!(N*N%2)) {
		for (int i= 2; i <= N*N; i+=2) {
			mul(4);
		}
	}
	else {
		for (int i = 2; i <= N*N-1; i+=2) {
			mul(4);
		}
		mul(2);
	}
	for (int i = 2; i <= N; ++i) {
		mul(i);
	}
}

int main () {
	freopen ("patrate2.in", "r", stdin);
	freopen ("patrate2.out", "w", stdout);
	
	scanf ("%d", &N);
	
	solve ();
	for (int i = v[0]; i >=1; --i) {
		printf ("%d", v[i]);
	}
	
	return 0;
}