class RLEIterator {
  private int[] encoding;
  private int major = 0;
  private int minor = 0;

  public RLEIterator(int[] encoding) {
    this.encoding = encoding;
  }

  private void nextSegment() {
    major += 2;
    minor = 0;
  }

  private int lastConsumed() {
    if (major == 0 && minor == 0) {
      // Haven't consumed anything
      return -1;
    } else if (major <= encoding.length && minor == 0) {
      // Consumed last element of a previous segment
      return encoding[major - 1];
    } else if (major >= encoding.length) {
      // Everything was consumed
      return -1;
    }

    // Last consumed from the current segment
    return encoding[major + 1];
  }

  public int next(int n) {
    while (n > 0 && major < encoding.length) {
      int consumed = Math.min(n, encoding[major] - minor);

      n -= consumed;
      minor += consumed;

      if (minor == encoding[major]) {
        nextSegment();
      }
    }

    if (n > 0) {
      return -1;
    }

    return lastConsumed();
  }
}

/**
 * Your RLEIterator object will be instantiated and called as such: RLEIterator obj = new
 * RLEIterator(encoding); int param_1 = obj.next(n);
 */