#include <iostream>
#include<stack>
#include<vector>
#include<algorithm>
#include<list>
using namespace std;
//链表节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode():val(0),next(nullptr){}
ListNode(int x):val(x),next(nullptr){}
ListNode(int x,ListNode* next):val(x),next(next){}
};
//初始化插入数据
ListNode* Init() {
ListNode* head=new ListNode(-1);
ListNode* tmp=head;
int n;
int x;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> x;
ListNode* newNode = new ListNode(x);
tmp->next = newNode;
tmp = tmp->next;
}
return head->next;
}
//打印链表
void PrintList(ListNode* head) {
while (head != nullptr) {
cout << head->val << " ";
head = head->next;
}
}
class Solution {
public:
Solution() {
}
ListNode* reverseK(ListNode* head, int k) {
stack<int> s;
int count = 0;
ListNode* cur = head;
ListNode* res = new ListNode(-1);
ListNode* rescur = res;
while (cur != nullptr) {
count++;
s.push(cur->val);
if (count == k) {
while (count!=0) {
count--;
ListNode* newNode = new ListNode(s.top());
s.pop();
rescur->next = newNode;
rescur = rescur->next;
}
}
cur = cur->next;
}
while (!s.empty()) {
ListNode* newNode = new ListNode(s.top());
newNode->next = rescur->next;
rescur->next = newNode;
s.pop();
}
return res->next;
}
};
int main() {
Solution s;
ListNode* p = Init();
int k;
cin >> k;
ListNode* res = s.reverseK(p, k);
PrintList(res);
return 0;
}