public static void Main()
        {
            int year;
            int day;
            int part;

            Console.WriteLine("Advent Of Code");
            Console.WriteLine("====================================");

            try
            {
                EnvironmentRepository environmentRepository = new EnvironmentRepository();
                string yearEnv = environmentRepository.ReadYearInput();
                string dayEnv  = environmentRepository.ReadDayInput();
                string partEnv = environmentRepository.ReadPartInput();

                if (string.IsNullOrEmpty(yearEnv))
                {
                    Console.WriteLine("Task year is not set.");
                    return;
                }
                if (string.IsNullOrEmpty(dayEnv))
                {
                    Console.WriteLine("Task day is not set.");
                    return;
                }
                if (string.IsNullOrEmpty(partEnv))
                {
                    Console.WriteLine("Task part is not set.");
                    return;
                }

                year = ParseYearInput(yearEnv);
                day  = ParseDayInput(dayEnv);
                part = ParsePartInput(partEnv);
            }
            catch (ArgumentException e)
            {
                Console.WriteLine(e.Message);
                return;
            }

            Type taskType = Type.GetType($"App.Tasks.Year{year}.Day{day}.Part{part}");

            if (taskType is null)
            {
                Console.WriteLine($"Task with year: {year}, day: {day} and part: {part} doesn't exist.");
                return;
            }

            string     input          = ReadInputHelper.ReadTaskInput(year, day);
            object     task           = Activator.CreateInstance(taskType);
            MethodInfo solutionMethod = taskType.GetMethod("Solution");

            Stopwatch stopwatch = Stopwatch.StartNew();
            var       result    = solutionMethod.Invoke(task, new object[] { input });

            stopwatch.Stop();

            Console.WriteLine($"Execution time: {stopwatch.ElapsedMilliseconds} miliseconds");
            Console.WriteLine($"Result: {result}");
        }