/*
* c.cpp
*
* Created on: 2013-10-7
* Author: wangzhu
*/
#include<cstdio>
#include<stack>
#include<iostream>
using namespace std;
struct Node {
int key;
Node* next;
};
/**
* 尾插法:超时
*/
void addToTail(Node* root, int value) {
Node* node = new Node();
node->key = value;
node->next = NULL;
if (root->next == NULL) {
root->next = node;
} else {
Node* tempNode = root->next;
while (tempNode->next != NULL) {
tempNode = tempNode->next;
}
tempNode->next = node;
}
}
/**
* 头插法:Accepted
*/
void addTohead(Node *root, int value) {
Node* tempNode = root->next;
Node* node = new Node;
node->key = value;
node->next = tempNode;
root->next = node;
}
void printToStack(Node* root) {
stack<Node*> nodeStack;
Node* tempNode = root->next;
while (tempNode != NULL) {
nodeStack.push(tempNode);
tempNode = tempNode->next;
}
while (!nodeStack.empty()) {
tempNode = nodeStack.top();
printf("%d\n", tempNode->key);
nodeStack.pop();
}
}
void diqu(Node* node) {
if (node != NULL) {
if (node->next != NULL) {
diqu(node->next);
}
printf("%d\n", node->key);
}
}
void print(Node *node) {
while (node != NULL) {
printf("%d\n", node->key);
node = node->next;
}
}
int main() {
freopen("data.in", "r", stdin);
int n;
Node* root = new Node();
root->next = NULL;
while(~scanf("%d",&n)) {
if( 0 > n) {
break;
}
//addToTail(root,n);
addTohead(root,n);
}
//printToStack(root);
print(root->next);
return 0;
}