// Path: src/main/java/org/avmframework/localsearch/IntegerFibonacciNumbers.java
// static int fibonacci(int position) {
//   if (position < 0 || position >= maxPosition()) {
//     throw new IntegerFibonacciNumberException(
//         "Cannot return fibonacci number at position "
//             + position
//             + " in sequences. Positions range from 0 to "
//             + maxPosition());
//   }
//   return numbers.get(position);
// }
// 
// Path: src/main/java/org/avmframework/localsearch/IntegerFibonacciNumbers.java
// static int positionOfSmallestFibonacciNumberGreaterOrEqualTo(int target) {
//   int num = -1;
//   do {
//     num++;
//   }
//   while (num < maxPosition() && fibonacci(num) < target);
//   return num;
// }
// 
// Path: src/main/java/org/avmframework/TerminationException.java
// public class TerminationException extends Exception {}
// 
// Path: src/main/java/org/avmframework/objective/ObjectiveValue.java
// public abstract class ObjectiveValue<T extends ObjectiveValue> implements Comparable<T> {
// 
//   public abstract boolean isOptimal();
// 
//   public boolean betterThan(T other) {
//     return compareTo(other) > 0;
//   }
// 
//   public boolean sameAs(T other) {
//     return compareTo(other) == 0;
//   }
// 
//   public boolean worseThan(T other) {
//     return compareTo(other) < 0;
//   }
// }


import static org.avmframework.localsearch.IntegerFibonacciNumbers.fibonacci;
import static org.avmframework.localsearch.IntegerFibonacciNumbers.positionOfSmallestFibonacciNumberGreaterOrEqualTo;
import org.avmframework.TerminationException;
import org.avmframework.objective.ObjectiveValue;
package org.avmframework.localsearch;



public class LatticeSearch extends PatternThenEliminationSearch {

  public LatticeSearch() {}

  public LatticeSearch(int accelerationFactor) {
    super(accelerationFactor);
  }

  protected void performEliminationSearch(int left, int right) throws TerminationException {

    int interval = right - left + 2;
// Path: src/main/java/org/avmframework/localsearch/IntegerFibonacciNumbers.java
// static int fibonacci(int position) {
//   if (position < 0 || position >= maxPosition()) {
//     throw new IntegerFibonacciNumberException(
//         "Cannot return fibonacci number at position "
//             + position
//             + " in sequences. Positions range from 0 to "
//             + maxPosition());
//   }
//   return numbers.get(position);
// }
// 
// Path: src/main/java/org/avmframework/localsearch/IntegerFibonacciNumbers.java
// static int positionOfSmallestFibonacciNumberGreaterOrEqualTo(int target) {
//   int num = -1;
//   do {
//     num++;
//   }
//   while (num < maxPosition() && fibonacci(num) < target);
//   return num;
// }
// 
// Path: src/main/java/org/avmframework/TerminationException.java
// public class TerminationException extends Exception {}
// 
// Path: src/main/java/org/avmframework/objective/ObjectiveValue.java
// public abstract class ObjectiveValue<T extends ObjectiveValue> implements Comparable<T> {
// 
//   public abstract boolean isOptimal();
// 
//   public boolean betterThan(T other) {
//     return compareTo(other) > 0;
//   }
// 
//   public boolean sameAs(T other) {
//     return compareTo(other) == 0;
//   }
// 
//   public boolean worseThan(T other) {
//     return compareTo(other) < 0;
//   }
// }


// Path: src/main/java/org/avmframework/localsearch/LatticeSearch.java
import static org.avmframework.localsearch.IntegerFibonacciNumbers.fibonacci;
import static org.avmframework.localsearch.IntegerFibonacciNumbers.positionOfSmallestFibonacciNumberGreaterOrEqualTo;
import org.avmframework.TerminationException;
import org.avmframework.objective.ObjectiveValue;

package org.avmframework.localsearch;



public class LatticeSearch extends PatternThenEliminationSearch {

  public LatticeSearch() {}

  public LatticeSearch(int accelerationFactor) {
    super(accelerationFactor);
  }

  protected void performEliminationSearch(int left, int right) throws TerminationException {

    int interval = right - left + 2;
    int num = positionOfSmallestFibonacciNumberGreaterOrEqualTo(interval);