@Contract(pure = true)
  public static @NotNull <T> Iterable<T> iterateBackward(@NotNull List<? extends T> list) {
    return () -> new Iterator<T>() {
      private final ListIterator<? extends T> it = list.listIterator(list.size());

      @Override
      public boolean hasNext() {
        return it.hasPrevious();
      }

      @Override
      public T next() {
        return it.previous();
      }

      @Override
      public void remove() {
        it.remove();
      }
    };
  }
@Contract(pure = true)
  public static @NotNull <T> Iterable<T> iterateBackward(@NotNull List<? extends T> list)