import java.util.*;
import java.lang.*;
import java.io.*;
class Test
{
static class Node<T>
{
Node next;
T data;
Node(T data) { this.data = data; }
@Override
public String toString
() { return data.
toString(); } }
// reverses a linked-list starting at 'start', ending at min(end, len-th element)
// returns {first element, last element} with (last element).next = (len+1)-th element
static <T> Node<T>[] reverse(Node<T> start, int len)
{
Node<T> current = start;
Node<T> prev = null;
while (current != null && len > 0)
{
Node<T> temp = current.next;
current.next = prev;
prev = current;
current = temp;
len--;
}
start.next = current;
return new Node[]{prev, start};
}
static <T> void reverseByBlock(Node<T> start, int k)
{
// reverse the complete list
start.
next = reverse
(start.
next,
Integer.
MAX_VALUE)[0]; // reverse the individual blocks
Node<T>[] output;
Node<T> current = start;
while (current.next != null)
{
output = reverse(current.next, k);
current.next = output[0];
current = output[1];
}
}
public static void main
(String[] args
) {
Scanner scanner
= new Scanner
(System.
in); while (scanner.hasNextInt())
{
int k = scanner.nextInt();
// read the linked-list from console
Node<Integer> start = new Node<>(null);
Node<Integer> current = start;
int n = scanner.nextInt();
for (int i = 1; i <= n; i++)
{
current.next = new Node<>(scanner.nextInt());
current = current.next;
System.
out.
print(current.
data + " "); }
System.
out.
println("| k = " + k
); // reverse the list
reverseByBlock(start, k);
// display the list
for (Node<Integer> node = start.next; node != null; node = node.next)
}
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBUZXN0CnsKICAgc3RhdGljIGNsYXNzIE5vZGU8VD4KICAgewogICAgICBOb2RlIG5leHQ7CiAgICAgIFQgZGF0YTsKICAgICAgTm9kZShUIGRhdGEpIHsgdGhpcy5kYXRhID0gZGF0YTsgfQogICAgICBAT3ZlcnJpZGUKICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTsgfQogICB9CiAgIAogICAvLyByZXZlcnNlcyBhIGxpbmtlZC1saXN0IHN0YXJ0aW5nIGF0ICdzdGFydCcsIGVuZGluZyBhdCBtaW4oZW5kLCBsZW4tdGggZWxlbWVudCkKICAgLy8gcmV0dXJucyB7Zmlyc3QgZWxlbWVudCwgbGFzdCBlbGVtZW50fSB3aXRoIChsYXN0IGVsZW1lbnQpLm5leHQgPSAobGVuKzEpLXRoIGVsZW1lbnQKICAgc3RhdGljIDxUPiBOb2RlPFQ+W10gcmV2ZXJzZShOb2RlPFQ+IHN0YXJ0LCBpbnQgbGVuKQogICB7CiAgICAgIE5vZGU8VD4gY3VycmVudCA9IHN0YXJ0OwogICAgICBOb2RlPFQ+IHByZXYgPSBudWxsOwogICAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsICYmIGxlbiA+IDApCiAgICAgIHsKICAgICAgICAgTm9kZTxUPiB0ZW1wID0gY3VycmVudC5uZXh0OwogICAgICAgICBjdXJyZW50Lm5leHQgPSBwcmV2OwogICAgICAgICBwcmV2ID0gY3VycmVudDsKICAgICAgICAgY3VycmVudCA9IHRlbXA7CiAgICAgICAgIGxlbi0tOwogICAgICB9CiAgICAgIHN0YXJ0Lm5leHQgPSBjdXJyZW50OwogICAgICByZXR1cm4gbmV3IE5vZGVbXXtwcmV2LCBzdGFydH07CiAgIH0KCiAgIHN0YXRpYyA8VD4gdm9pZCByZXZlcnNlQnlCbG9jayhOb2RlPFQ+IHN0YXJ0LCBpbnQgaykKICAgewogICAgICAvLyByZXZlcnNlIHRoZSBjb21wbGV0ZSBsaXN0CiAgICAgIHN0YXJ0Lm5leHQgPSByZXZlcnNlKHN0YXJ0Lm5leHQsIEludGVnZXIuTUFYX1ZBTFVFKVswXTsKICAgICAgLy8gcmV2ZXJzZSB0aGUgaW5kaXZpZHVhbCBibG9ja3MKICAgICAgTm9kZTxUPltdIG91dHB1dDsKICAgICAgTm9kZTxUPiBjdXJyZW50ID0gc3RhcnQ7CiAgICAgIHdoaWxlIChjdXJyZW50Lm5leHQgIT0gbnVsbCkKICAgICAgewogICAgICAgICBvdXRwdXQgPSByZXZlcnNlKGN1cnJlbnQubmV4dCwgayk7CiAgICAgICAgIGN1cnJlbnQubmV4dCA9IG91dHB1dFswXTsKICAgICAgICAgY3VycmVudCA9IG91dHB1dFsxXTsKICAgICAgfQogICB9CiAgIAogICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICB7CiAgICAgIFNjYW5uZXIgc2Nhbm5lciA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CiAgICAgIHdoaWxlIChzY2FubmVyLmhhc05leHRJbnQoKSkKICAgICAgewogICAgICAgICBpbnQgayA9IHNjYW5uZXIubmV4dEludCgpOwogICAgICAgICAvLyByZWFkIHRoZSBsaW5rZWQtbGlzdCBmcm9tIGNvbnNvbGUKICAgICAgICAgTm9kZTxJbnRlZ2VyPiBzdGFydCA9IG5ldyBOb2RlPD4obnVsbCk7CiAgICAgICAgIE5vZGU8SW50ZWdlcj4gY3VycmVudCA9IHN0YXJ0OwogICAgICAgICBpbnQgbiA9IHNjYW5uZXIubmV4dEludCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJJbnB1dDogIik7CiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICAgewogICAgICAgICAgICBjdXJyZW50Lm5leHQgPSBuZXcgTm9kZTw+KHNjYW5uZXIubmV4dEludCgpKTsKICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChjdXJyZW50LmRhdGEgKyAiICIpOwogICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigifCBrID0gIiArIGspOwogICAgICAgICAvLyByZXZlcnNlIHRoZSBsaXN0CiAgICAgICAgIHJldmVyc2VCeUJsb2NrKHN0YXJ0LCBrKTsKICAgICAgICAgLy8gZGlzcGxheSB0aGUgbGlzdAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJSZXN1bHQ6ICIpOwogICAgICAgICBmb3IgKE5vZGU8SW50ZWdlcj4gbm9kZSA9IHN0YXJ0Lm5leHQ7IG5vZGUgIT0gbnVsbDsgbm9kZSA9IG5vZGUubmV4dCkKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChub2RlICsgIiAiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwogICAgICB9CiAgIH0KfQ==