static void Main()
        {
            Console.WriteLine("********************************************");
            Console.WriteLine("Neural Networks - Project No.2 - BAM network");
            Console.WriteLine("********************************************");

            #region Prepare the data

            // initialize output vectors - phone numbers
            var phoneNumbers = new[] { "3120440569", "9114567896", "0538795012", "1234567890", "0508656789" };

            // initializing input vectors - 16 bit icons
            var db = ReadIcons(phoneNumbers);

            Console.WriteLine("\nAssociations Icons: \n");
            foreach (var icon in db)
                Console.WriteLine(icon.ToString(1));

            #endregion

            // initialize the BAM neural network wrapper
            var bamNeuralNetworkWrapper = new BamNetworkPhoneToIconsWrapper(db,
                new PhoneNumberToBiPolarConvertorHuffmanCode(new BinaryToBiPolarVecConvertor()),
                new BinaryToBiPolarVecConvertor());

            Console.WriteLine("Test BAM Network : \n");

            TestInputIconsWithErrorPerentage(db, bamNeuralNetworkWrapper,  0 ,1);
            TestInputIconsWithErrorPerentage(db, bamNeuralNetworkWrapper, 20, 5);
            TestInputIconsWithErrorPerentage(db, bamNeuralNetworkWrapper, 50, 5);
        }
        private static void TestInputIconsWithErrorPerentage(IEnumerable<IconInputDataStructure> db,
            BamNetworkPhoneToIconsWrapper bamNeuralNetworkWrapper, int errorPercentage, int numberOfTests)
        {
            Console.WriteLine("Test the input icons with " + errorPercentage + "% random Error");

            // check all the input icons
            foreach (var iconInputDataStructure in db)
            {
                Console.ReadKey();
                Console.WriteLine("\tInputIcon: ");
                Console.WriteLine(iconInputDataStructure.ToString(2));

                // create random error icons and test the result
                for (var i = 0; i < numberOfTests; i++)
                {
                    Console.ReadKey();
                    Console.WriteLine("\t\t" + errorPercentage +  "% random error icon:");
                    var errorIcon = iconInputDataStructure.CreateError(errorPercentage);
                    Console.WriteLine(errorIcon.ToString(3));

                    // output results
                    Console.WriteLine("\t\tOutputIcon:");
                    Console.WriteLine(bamNeuralNetworkWrapper.Associate(errorIcon).ToString(3));
                }
            }
        }