/* I445
 * Vgh Mrton 11. osztly
 * Budapesti Fazekas Mihly Gimnzium
 * A program c# nyelven, Microsoft Visual Studio 2017-ben kszlt.
 */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace i445gyorsabb
{
    class Program
    {
        static int length = Start();
        static int[] a = new int[length];
        static int[] b = new int[length];
        static int[] c = new int[length];



        static void Main(string[] args)
        {
            b[0] = 1;
            for (int i = 0; i < length; i++)
            {
                if (i == 0)
                    Oszt(5);
                else
                {
                    Oszt(5);
                    Oszt(5);
                }
                Cbe(i);
                AhozEls(i);              
            }
            Ngyszer();
            Array.Clear(b, 0, length);
            b[0] = 1;
            Array.Clear(c, 0, length);
            for (int i = 0; i < length; i++)
            {
                if (i == 0)
                    Oszt(239);
                else
                {
                    Oszt(239);
                    Oszt(239);
                }
                Cbe(i);
                AhozMsodik(i);
            }
            Ngyszer();
            Console.Write(a[0] + ",");
            for (int i = 1; i < (length-9); i++)    
                Console.Write(a[i]);         
            Console.ReadKey();
        }
        static int Start()
        {
            int l = 0;
            Console.WriteLine("Hny tizedesjegy pontossggal? (1000 felett az utols szmjegyek pontatlanok)");
            l = Convert.ToInt32(Console.ReadLine());
            return (l + 10);
            /* A program 1000-ig hiba nlkl visszaadja, ha a 1010-es hatvnyig nzzk
             * Itthon 10000-ig prbltam ki, az utols 19 tizedesjegy volt csak pontatlan
             * Nem jttem r, hogy lehet a kvnt hossz fggvnyben megfelel hatvnyig szmolni, hogy pontos legyen*/
        }
        static void Oszt(int q)
        {
            int maradk = 0;
            int x;
            for (int i = 0; i < length; i++)
            {
                x = maradk + b[i];
                b[i] = (x / q) % 10;
                maradk = (x - b[i] * q) * 10;
            }
        }
        static void Cbe(int n)
        {
            n = 2 * n + 1;
            int maradk = 0;
            for (int i = 0; i < length; i++)
            {
                c[i] = ((maradk + b[i]) / n) % 10;
                maradk = (maradk + b[i] - c[i] * n) * 10;
            }
        }
        static void AhozEls(int n)
        {
            if (n % 2 == 0)
                AhozPoz();
            else
                AhozNeg();
        }
        static void AhozPoz()
        {
            int maradk = 0;
            int x;
            for (int i = (length - 1); i >= 0; i--)
            {
                x = a[i];
                a[i] = (a[i] + c[i] + maradk) % 10;
                maradk = (x + c[i] + maradk) / 10;
            }
        }
        static void AhozNeg()
        {
            int maradk = 0;
            for (int i = (length - 1); i >= 0; i--)
            {
                if (a[i] >= (c[i] + maradk))
                {
                    a[i] = a[i] - c[i] - maradk;
                    maradk = 0;
                }
                else
                {
                    a[i] = a[i] + 10 - c[i] - maradk;
                    maradk = 1;
                }
            }
        }
        static void Ngyszer()
        {
            int maradk = 0;
            int x;
            for (int i = (length - 1); i >= 0; i--)
            {
                x = (a[i] * 4 + maradk);
                a[i] = x % 10;
                maradk = x / 10;
            }

        }
        static void AhozMsodik(int n)
        {
            if (n % 2 == 1)
                AhozPoz();
            else
                AhozNeg();
        }

    }
}
