private void PrintResults(IQPAnalysisResults <int> results)
        {
            Console.WriteLine($"Main result: {results.MainResults}.");

            if (results.MainResults.IndicatesSelfInjectivity())
            {
                Console.WriteLine("The Nakayama permutation is as follows:");
                foreach (var(sourceVertex, targetVertex) in results.NakayamaPermutation)
                {
                    Console.WriteLine($"{sourceVertex} -> {targetVertex}");
                }

                Console.WriteLine($"The order of the Nakayama permutation is {results.NakayamaPermutation.Order}.");
            }
        }
        /// <summary>
        /// Creates an object of a class implementing the
        /// <see cref="IQuiverInPlaneAnalysisResults{TVertex}"/> interface for the case that the QP
        /// extraction was successful and the extracted QP was analyzed.
        /// </summary>
        /// <typeparam name="TVertex">The type of the vertices in the quiver.</typeparam>
        /// <param name="qpAnalysisResults">The results of the analysis of the QP.</param>
        public static IQuiverInPlaneAnalysisResults <TVertex> CreateQuiverInPlaneAnalysisResults <TVertex>(IQPAnalysisResults <TVertex> qpAnalysisResults)
            where TVertex : IEquatable <TVertex>, IComparable <TVertex>
        {
            if (qpAnalysisResults is null)
            {
                throw new ArgumentNullException(nameof(qpAnalysisResults));
            }

            var qpMainResults = qpAnalysisResults.MainResults;

            // Shift up the non-first bits (corresponding to everything except Success) by 4 (which is
            // the number of non-success members in the QPExtractionResult enum)
            qpMainResults = (QPAnalysisMainResults)((int)(qpAnalysisResults.MainResults & ~QPAnalysisMainResults.Success) << 4) | (qpMainResults & QPAnalysisMainResults.Success);
            var mainResults = (QuiverInPlaneAnalysisMainResults)qpMainResults;

            return(new QuiverInPlaneAnalysisResults <TVertex>(
                       mainResults,
                       qpAnalysisResults.MaximalPathRepresentatives,
                       qpAnalysisResults.NakayamaPermutation,
                       qpAnalysisResults.LongestPathEncountered));
        }