import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class O1112_sparsetable { public static void main(String[] args) throws IOException { BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); int M = Integer.parseInt(r.readLine()); List data = new ArrayList<>(); String s; while(!(s = r.readLine()).equals("-1")) { data.add(Integer.parseInt(s)); } int[] d = new int[data.size()]; for (int i = 0; i < data.size(); i++) { d[i] = data.get(i); } SparseTable table = new SparseTable(d); for (int i = 0; i <= data.size() - M; i++) { System.out.println(table.calc(i, i + M - 1)); } } static class SparseTable { final int[][] data; final int[] lenToPOT; final int size; final int maxPOT; SparseTable(int size) { data = new int[maxPOT = getPOT(size) + 1][this.size = size]; lenToPOT = new int[size + 1]; for (int i = 1; i <= size; i++) { lenToPOT[i] = getPOT(i); } } SparseTable(int[] orig) { this(orig.length); init(orig); } private void init(int[] orig) { System.arraycopy(orig, 0, data[0], 0, orig.length); for (int i = 1; i <= maxPOT; i++) { int len = 1 << i; int end = size - len + 1; for (int j = 0; j < end; j++) { int left = data[i - 1][j]; int right = data[i - 1][j + (len / 2)]; data[i][j] = Math.max(left, right); } } } int calc(int from, int to) { int pot = lenToPOT[to - from + 1]; int[] locData = data[pot]; int len = 1 << pot; int left = locData[from]; int right = locData[to - len + 1]; return Math.max(left, right); } private int getPOT(int num) { if(num == 1) return 0; int pot = 0; int i = 1; while(true) { i *= 2; if(i >= num) { return pot; } pot++; } } } }