#include<iostream>
#include<cstdlib>
#include<string>
#include<malloc.h>
#include<map>
using namespace std;
map<int,int>ma;
int flagg=0;
typedef struct node
{
int data;
struct node*left;
struct node* right;
int flag;
}bitnode,*bitree;
void createbittree(bitree *T,int flag3)
{
int temp;
cin>>temp;
cin.ignore();
flagg++;
if(temp==-1&&flagg==1)return;
if(temp==-1)
*T=NULL;
else
{
*T=(bitree)malloc(sizeof(bitnode));
if(!(*T))
exit(-1);
(*T)->data=temp;
flagg++;
(*T)->flag=flag3;
createbittree(&((*T)->left),flag3-1);
createbittree(&((*T)->right),flag3+1);
}
}
void bfstree(bitree T)
{
if(T)
{
ma[T->flag]+=T->data;
bfstree(T->left);
bfstree(T->right);
}
}
int main()
{
int a;
int sum=1;
while(true)
{
flagg=0;
bitree T;
T=NULL;
createbittree(&T,0);
if(flagg==1)break;
cout<<"Case "<<sum++<<":"<<endl;
ma.clear();
bfstree(T);
map<int,int>::iterator it;
for(it=ma.begin();it!=ma.end();it++)
cout<<it->second<<" ";
cout<<endl;
cout<<endl;
}
return 0;
}