#include <stdio.h>

long long unsigned silnia_iter(unsigned);
long long unsigned silnia_rekur(unsigned);

int main(int argc, char* argv[]) 
{
	printf("%I64u\n", silnia_iter(0));
    printf("%I64u\n", silnia_iter(1));
    printf("%I64u\n", silnia_iter(2));
    printf("%I64u\n", silnia_iter(5));
    
    printf("%I64u\n", silnia_rekur(0));
    printf("%I64u\n", silnia_rekur(1));
    printf("%I64u\n", silnia_rekur(2));
    printf("%I64u\n", silnia_rekur(5));
    
    return 0;
}

long long unsigned silnia_iter(unsigned n)
{
    if (n < 0)
    {
        return -1;
    }
    else
    {
        long long unsigned silnia = 1;
        size_t i;
        
        for (i = 1; i <= n; i++)
        {
            silnia *= i;
        }
        
        return silnia;
    }
}

long long unsigned silnia_rekur(unsigned n)
{
    if (n < 0)
    {
        return -1;
    }
    else if (n < 2)
    {
        return 1;
    }
    else
    {
        return n*silnia_rekur(n-1);
    }
}