/*
中科_2010_1
*/
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#define maxn 101
// 存储每行每个单词
char str[maxn][maxn][maxn];
int main() {
// cnt为当前函数,cnt1[i]表示i行的单词数
int i=0, j=0, k=0, cnt=0, cnt1[maxn]={0};
char line[maxn]; // 存储当前行
while(gets(line) != NULL) {
for(i=0; i<strlen(line); ++i) { // 遍历当前行
if(line[i] == ' ') { // 遇到空格说明当前单词结束
str[cnt][j][k] = '\0';
j++;
k = 0;
} else if(isalpha(line[i])) { // 若为字符,直接输出
str[cnt][j][k++] = line[i];
} else if(line[i] == '!') { // 若为 !,删除前一个字符
k--;
} else if(line[i] == '*') { // 若为 *,删除前一行
int a, b;
for(a=0; a<j; ++a) { // 将本行已处理字符复制到上一行
for(b=0;str[cnt][a][b]!='\0'; ++b) {
str[cnt-1][a][b] = str[cnt][a][b];
}
}
for(b=0;b<k;b++)str[cnt-1][j][b]=str[cnt][j][b];
cnt--; // 行数-1
} else if(line[i] == '>') { // 若为 >,大小写互换
if(str[cnt][j-1][0]>='a' && str[cnt][j-1][0]<='z') {
str[cnt][j-1][0] -= 32; // 小写转大写
} else { // 大写转小写
str[cnt][j-1][0] += 32;
}
}
}
cnt1[cnt] = j; // 记录每行单词数
cnt++; // 记录行数
j = 0; // 初始化
k = 0;
}
for(i=0; i<cnt; ++i) { // 输出
for(j=0; j<=cnt1[i]; ++j) {
printf("%s ", str[i][j]);
}
printf("\n");
}
return 0;
}