#include <iostream>
using namespace std;
typedef struct Node
{
int val;
Node *next;
}node;
int sum;
node* mycreat(int n)
{
node *head=NULL,*p=NULL,*ne=NULL;
head=(node*)malloc(sizeof(node));
p=head;
int v;
int f=1;
sum=0;
if(n!=0)
{
sum=1;//由第一个数值开始总数为1
ne=(node*)malloc(sizeof(node));//每次要建立下一个指针时都有开辟空间
ne->val=n;//第一个已经接收,赋值
p->next=ne;//和下一个链接起来
p=ne;//动态指针指向下一个
while(scanf("%d",&v))
{
if(v==0) break;
else
{
f++;
ne=(node*)malloc(sizeof(node));//每次要建立下一个指针时都有开辟空间
ne->val=v;
p->next=ne;
p=ne;
sum++;//做长度计算
}
}
}
p->next=NULL;
return head;
}
void myprint(node *head)
{
printf("%d\n",sum);//输出长度
int f=0;
node *p=NULL;
p=head->next;//头指针的val是null,里的next指向下个指针,要从下个的值开始
while(p!=NULL)
{
if(f==0)
printf("%d",p->val);
else
printf(" %d",p->val);
p=p->next;//!!!要记得链接
f++;
}
printf("\n");
return;
}
int main()
{
int m;
node *head;
while(~scanf("%d",&m))
{
if(m==-1) break;
head=mycreat(m);
myprint(head);
}
return 0;
}