#include <iostream>
using namespace std;
struct ListNode {
    int val;
    struct ListNode* next;
    ListNode(int x) :
        val(x), next(NULL) {}
};
void printLink(ListNode* head) {
    ListNode* p = head;
    while (p != nullptr) {
        cout << p->val << " ";
        p = p->next;
    }
    cout << endl;
}
ListNode* reverseNode(ListNode* head) {
    ListNode* pre = nullptr;
    ListNode* cur = head;
    ListNode* nex = nullptr;
    while (cur) {
        nex = cur->next;
        cur->next = pre;

        pre = cur;
        cur = nex;
    }

    return pre;
}
ListNode* reverseKGroup(ListNode* head, int k) {
    // write code here
    ListNode* dummy = head;
    ListNode* pre = dummy, * end = dummy;

    while (end->next != NULL) {
        for (int i = 0; i < k && end; i++) end = end->next;
        if (end == nullptr)  break;//使end循环向后,指向最后一个
        ListNode* start = pre->next;
        ListNode* endNextNode = end->next;

        end->next = nullptr;
        pre->next = reverseNode(start);
        start->next = endNextNode;
        pre = end = start;
    }

    return dummy->next;

}
int main() {
    int a = 0, k = 0, n = 0;
    ListNode* linkdata = new ListNode(0);
    ListNode* tmp = nullptr;
    ListNode* tail = linkdata;
    ListNode* ans = nullptr;
    while (true) {
        cin >> a;
        tmp = new ListNode(a);
        tail->next = tmp;
        tail = tail->next;
        n += 1;
        if (cin.get() == '\n') {
            break;
        }
    }

    cin >> k;
    ans = reverseKGroup(linkdata, k);

    printLink(ans);

    return 0;
}
// 64 位输出请用 printf("%lld")