public IEnumerable <IShuffleAction> MergeWithBelow(IShuffleAction below, BigInteger deckSize)
 {
     if (below is DealIntoNewStack)
     {
         return new List <IShuffleAction> {
                    below.Copy(), new Cut(MathHelper.Mod(-CutFrom, deckSize))
         }
     }
     ;
     if (below is Cut cut)
     {
         return new List <IShuffleAction> {
                    new Cut(MathHelper.Mod(CutFrom + cut.CutFrom, deckSize))
         }
     }
     ;
     if (below is DealWithIncrement dwi)
     {
         return new List <IShuffleAction> {
                    below.Copy(), new Cut(MathHelper.Mod(dwi.Increment * CutFrom, deckSize))
         }
     }
     ;
     throw new NotImplementedException();
 }
 public IEnumerable <IShuffleAction> MergeWithBelow(IShuffleAction below, BigInteger deckSize)
 {
     if (below is DealIntoNewStack)
     {
         return new List <IShuffleAction> {
                    new DealWithIncrement(MathHelper.Mod(-Increment, deckSize)), new Cut(1)
         }
     }
     ;
     if (below is DealWithIncrement dwi)
     {
         return new List <IShuffleAction> {
                    new DealWithIncrement(MathHelper.Mod(Increment * dwi.Increment, deckSize))
         }
     }
     ;
     if (below is Cut cut)
     {
         throw new NotImplementedException("not implemented for Cut below, shouldn't be necessary though");
     }
     throw new NotImplementedException();
 }