import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine().trim());
String[] rawInput = br.readLine().trim().split(" ");
int k = Integer.parseInt(br.readLine().trim());
// 构建链表
Node head = buildLinkedList(rawInput);
// 按要求逆序链表
head = reverseKList(head, k);
// 打印链表
printLinkedList(head);
br.close();
}
private static Node reverseKList(Node head, int k) {
if (null == head || k <= 1) {
return head;
}
Node newHead = null, curNode = head, preNode = null, next = null;
int cnt = k;
Node lastStartNode = head;
Node nextCurNode = head;
while (null != curNode) {
if (cnt-- > 0) {
// 正常反转
next = curNode.next;
curNode.next = preNode;
preNode = curNode;
curNode = next;
} else {
cnt = k;
if (null == newHead) {
newHead = preNode;
lastStartNode = head;
} else {
lastStartNode.next = preNode;
lastStartNode = nextCurNode;
}
nextCurNode = curNode;
preNode = null;
}
}
if (cnt == 0) {
lastStartNode.next = preNode;
return newHead;
}
// 最后不够k个节点了
curNode = preNode;
Node tmpPreNode = null;
while (null != curNode) {
next = curNode.next;
curNode.next = tmpPreNode;
tmpPreNode = curNode;
curNode = next;
}
lastStartNode.next = tmpPreNode;
return newHead;
}
// 打印链表
private static void printLinkedList(Node head) {
StringBuilder sb = new StringBuilder();
while (null != head) {
sb.append(head.value).append(" ");
head = head.next;
}
System.out.print(sb.toString().trim());
}
private static Node buildLinkedList(String[] rawInput) {
Node head = null, curNode = null;
for (int i = 0; i
Node tmpNode = new Node(Integer.parseInt(rawInput[i]));
if (null == head) {
head = tmpNode;
} else {
curNode.next = tmpNode;
}
curNode = tmpNode;
}
return head;
}
}
class Node {
public int value;
public Node next;
public Node(int value) {
this.value = value;
this.next = null;
}
}