static void Main(string[] args)
        {
            string input_f = "input.txt";

            byte[][] matr = ReadFromFile(input_f);
            if (matr.Length != 0)
            {
                if (EulerParse(matr))
                {
                    PointEntry first = ToPoint(matr);
                    List <int> ways  = new List <int>();
                    EulerWay(ways, first, matr);
                    Console.WriteLine("END");
                }
                else
                {
                    Console.WriteLine("Введенный граф не является Эйлеровым");
                }
            }
            else
            {
                Console.WriteLine("Граф не введен. Перезапустите программу, введя граф в файле или использовав ручной ввод");
            }

            Console.ReadKey();
        }
        public static bool EulerWay(List <int> ways, PointEntry point, byte[][] matr)
        {
            foreach (PointEntry next in point.Near)
            {
                for (int i = 0; i < matr[0].Length; i++)
                {
                    if (matr[point.Number][i] == 1 && matr[next.Number][i] == 1 && !ways.Contains(i))
                    {
                        List <int> help = new List <int>(ways);
                        help.Add(i);

                        if (EulerWay(help, next, matr))
                        {
                            Console.Write($"{point.Number + 1} => ");
                            return(true);
                        }
                    }
                }
            }

            if (ways.Count == matr[0].Length)
            {
                Console.Write($"\n{point.Number + 1} => ");
                return(true);
            }
            else
            {
                return(false);
            }
        }
 public int CompareTo(PointEntry ve)
 {
     if (this.Degree == ve.Degree)
     {
         return(0);
     }
     else if (this.Degree > ve.Degree)
     {
         return(1);
     }
     else
     {
         return(-1);
     }
 }
 public static bool Compare(PointEntry ve1, PointEntry ve2, int depth, int max_depth)
 {
     if (max_depth == depth)
     {
         return(true);
     }
     else
     {
         bool ans = false;
         if (ve1.Degree == ve2.Degree)
         {
             foreach (PointEntry venear1 in ve1.Near)
             {
                 bool help = false;
                 foreach (PointEntry venear2 in ve2.Near)
                 {
                     help = Compare(venear1, venear2, depth + 1, max_depth) || help;
                 }
                 ans = ans && help;
             }
         }
         return(ans);
     }
 }