private IList <IList <INumber> > ApplyOperation(IList <INumber> numbers, IndexPair indexPair, Func <INumber, INumber, INumber> operation)
        {
            var remaining = GetRemainingNumbers(numbers, indexPair);

            return(ApplyOperationVariants(numbers[indexPair.A], numbers[indexPair.B], remaining, operation));
        }
 private IList <INumber> GetRemainingNumbers(IList <INumber> numbers, IndexPair indexPair)
 {
     return(indexPair.Remaining.Select(remainingIndex => numbers[remainingIndex]).ToList());
 }