1 #include <stdio.h>
  2 #include <string.h>
  3 #define bool char
  4 #define WC 0
  5 #define T2B 1
  6 #define B2T 2
  7 int mode,set;
  8 int bline=0,bspace=0,ball=0;
  9 int aline=0,aspace=0,aall=0;
 10 int getone(void){
 11     int c=getchar();
 12     switch(c){
 13         case '\n':
 14             bline++;
 15             break;
 16         case ' ':
 17             bspace++;
 18     }
 19     if(c!=EOF){
 20         ball++;
 21     }
 22     return c;
 23 }
 24 void putone(int c){
 25     switch(c){
 26         case '\n':
 27             aline++;
 28             break;
 29         case ' ':
 30             aspace++;
 31     }
 32     putchar(c);
 33     aall++;
 34 }
 35 int main(){
 36     int tmp,c,i;
 37     char first[32];
 38     char* p;
 39     bool lead;
 40     gets(first);
 41     strtok(first," ");
 42     switch(first[0]){
 43         case 'w':
 44             mode=WC;
 45             break;
 46         case 't':
 47             mode=T2B;
 48             break;
 49         case 'b':
 50             mode=B2T;
 51     }
 52     if(mode!=WC){
 53         p=strtok(NULL," ");
 54         sscanf(p,"%d",&set);
 55     }
 56     switch(mode){
 57         case WC:
 58             while(getone()!=EOF);
 59             printf("%d %d %d\n",bline,bspace,ball);
 60             return 0;
 61         case T2B:
 62             lead=1;
 63             while((c=getone())!=EOF){
 64                 switch(c){
 65                     case '\n':
 66                         putone(c);
 67                         lead=1;
 68                         break;
 69                     case '\t':
 70                         if(lead){
 71                             for(i=1;i<=set;i++){
 72                                 putone(' ');
 73                             }
 74                         }else{
 75                             putone(c);
 76                         }
 77                         break;
 78                     case ' ':
 79                         putone(c);
 80                         break;
 81                     default:
 82                         putone(c);
 83                         lead=0;
 84                 }
 85             }
 86             printf("%d %d %d\n"
 87                    "%d %d %d\n"
 88                    ,bline,bspace,ball
 89                    ,aline,aspace,aall);
 90             return 0;
 91         case B2T:
 92             lead=1,tmp=0;
 93             while((c=getone())!=EOF){
 94                 switch(c){
 95                     case '\n':
 96                         if(lead){
 97                             for(i=1;i<=tmp;i++){
 98                                 putone(' ');
 99                             }
100                         }
101                         putone(c);
102                         lead=1,tmp=0;
103                         break;
104                     case ' ':
105                         if(lead){
106                             tmp++;
107                             if(tmp==set){
108                                 putone('\t');
109                                 tmp=0;
110                             }
111                         }else{
112                             putone(c);
113                         }
114                         break;
115                     case '\t':
116                         putone(c);
117                         break;
118                     default:
119                         if(lead){
120                             for(i=1;i<=tmp;i++){
121                                 putone(' ');
122                             }
123                         }
124                         putone(c);
125                         lead=0,tmp=0;
126                 }
127             }
128             printf("%d %d %d\n"
129                    "%d %d %d\n"
130                    ,bline,bspace,ball
131                    ,aline,aspace,aall);
132             return 0;
133     }
134     return 0;
135 }