private static Coverage MergeWith(Coverage first, Coverage second)
        {
            if (first.Contains(second))
            {
                return(first);
            }

            if (second.Contains(first))
            {
                return(second);
            }

            // this is not exactly right but let's leave it as is at the moment
            var bestPath = first.BestPath
                           .Concat(second.BestPath)
                           .OrderBy(_ => _.TrackMatchAt)
                           .Select((matched, index) => new MatchedWith(matched.TrackSequenceNumber, matched.TrackMatchAt, matched.TrackSequenceNumber, matched.TrackMatchAt, matched.Score));

            return(new Coverage(bestPath, CalculateNewQueryLength(first, second), first.TrackLength, first.FingerprintLength, first.PermittedGap));
        }