use strict;
package result;
sub replace{
    my (@that)=@_;
    my $replacement=splice(@that,-1,1);
    my $regex=splice(@that,-1,1);
    for(my $i=0;$i<=$#that;$i++){
        $that[$i][0]=~ s/$regex/$replacement/g;
        $main::blocks[$that[$i][2]][0]=~ s/$regex/$replacement/g;
    }
}
sub del{
    my (@that)=@_;
    for(my $i=$#that+1;$i--;){
        splice(@main::blocks,$that[$i][2],1);
    }
}
package main;
my @blocks=();
sub charAt{
    my ($str,$index)=@_;
    return substr($str,$index,1);
}
sub blocksPush{
    my ($block,$type)=@_;
    if(!$block eq ''){
        push(@blocks,[ $block,$type ]);
    }
}
sub selector{
    my ($query)=@_;
    #BLOCKSなどと指定することでそのタイプのブロックを返す
    my @result=();
    for(my $i=0;$i<=$#blocks;$i++){
        if($blocks[$i][1]==$query){
            push(@result,[$blocks[$i][0],$blocks[$i][1],$i]);
        }
    }
    return @result;
}
sub getBlock{
    my @result=@blocks;
    return @result;
}
sub setBlock{
    my ($i,@block)=@_;
    @blocks[$i]=@block;
}
use constant{
    OTHERS=>0,
    BLOCKS=>1,
    LEFT_CURLY_BRACKET=>2,
    RIGHT_CURLY_BRACKET=>3,
    NEWLINE=>4,
    TAB=>5,
    COMMENTS=>6,
    STRING=>7,
    PROPERTY=>8,
    COLON=>9,
    SEMICOLON=>10,
};
my @InverseType=('OTHERS','BLOCKS','LEFT_CURLY_BRACKET','RIGHT_CURLY_BRACKET','NEWLINE','TAB','COMMENTS','STRING','PROPERTY','COLON','SEMICOLON');
use constant{
    SINGLE_QUOTATION=>1,
    DOUBLE_QUOTATION=>2,
};
use constant{
    FALSE=>'',
    TRUE=>1,
};
#my $testCode="/* new clearfix */\n.clearfix:after {\nvisibility: hidden;\ndisplay: block;\nfont-size: 0;\ncontent: \" \";\nclear: both;\nheight: 0;\n}\n* html .clearfix             { zoom: 1; } /* IE6 */\n*:first-child+html .clearfix { zoom: 1; } /* IE7 */\n";
my $str=$ARGV[0];
$str=~ s/\\r/\r/g;
$str=~ s/\\t/\t/g;
$str=~ s/\\n/\n/g;
my $inComment=FALSE;
my $inString=FALSE;
my $isBeforeCharaSlash=FALSE;
my $isBeforeCharaAsterisk=FALSE;
my $bef=0;
my $indent=0;
for(my $i=0,my $j=length($str);$i<=$j;$i++){
    my $nowChar=&charAt($str,$i);
    if($nowChar eq '\\'){
        #エスケープシーケンスのためスルー
        $i++;
        next;
    }
    if(!$inString){
        #文字列の外
        if($nowChar eq '\''||$nowChar eq '"'){
            if($indent>0){
                blocksPush(substr($str,$bef,$i-$bef),BLOCKS);
            }
            if($indent==0){blocksPush(substr($str,$bef,$i-$bef),OTHERS);}
            $bef=$i;#'"'をSTRINGブロックは含むから
            if($nowChar eq '\''){
                $inString=SINGLE_QUOTATION;
            }else{
                $inString=DOUBLE_QUOTATION;
            }
            next;
        }
    }else{
        #文字列の中
        if($nowChar eq '\'' && $inString==SINGLE_QUOTATION || $nowChar eq '"' && $inString==DOUBLE_QUOTATION){
            $inString=FALSE;
            blocksPush(substr($str,$bef,$i+1-$bef),STRING);
            $bef=$i+1;
            next;
        }
    }
    if(!$inComment){
        #コメント外
        if($nowChar eq '*'&&$isBeforeCharaSlash){
            if($indent>0){blocksPush(substr($str,$bef,$i-1-$bef),BLOCKS);}
            if($indent==0){blocksPush(substr($str,$bef,$i-1-$bef),OTHERS);}
            $bef=$i-1;#'/*'をCOMMENTSブロックは含むから
            $inComment=TRUE;#前が/で、今が*となってて/*になるからコメントがここから開始
            next;
        }
        $isBeforeCharaSlash=$nowChar eq '/';#前の要素が/で、次が*ならコメントになるから
    }else{
        #コメント内
        if($nowChar eq '*'){
            $isBeforeCharaAsterisk=TRUE;
        }
        if($nowChar eq '/'&&$isBeforeCharaAsterisk){
            $inComment=FALSE;
            blocksPush(substr($str,$bef,$i+1-$bef),COMMENTS);
            $bef=$i+1;
            next;
        }
        if($nowChar!='*'){
            $isBeforeCharaAsterisk=FALSE;
        }
    }
    if(!$inComment&&!$inString){
        #コメントの中でも文字列の中でもない
        if($nowChar eq "\n"){
            if($indent>0){blocksPush(substr($str,$bef,$i-$bef),BLOCKS);}
            blocksPush('\n',NEWLINE);
            $bef=$i+1;
            next;
        }
        if($nowChar eq "\t"){
            if($indent>0){blocksPush(substr($str,$bef,$i-$bef),BLOCKS);}
            blocksPush('\t',TAB);
            $bef=$i+1;
            next;
        }
        if($nowChar eq '{'){
            $indent++;
            blocksPush(substr($str,$bef,$i-$bef),OTHERS);
            blocksPush('{',LEFT_CURLY_BRACKET);
            $bef=$i+1;
        }
        if($nowChar eq '}'){
            $indent--;
            blocksPush(substr($str,$bef,$i-$bef),BLOCKS);
            blocksPush('}',RIGHT_CURLY_BRACKET);
            $bef=$i+1;
        }
        if($nowChar eq ':'){
            blocksPush(substr($str,$bef,$i-$bef),PROPERTY);
            blocksPush(':',COLON);
            $bef=$i+1;
        }
        if($nowChar eq ';'){
            blocksPush(substr($str,$bef,$i-$bef),BLOCKS);
            blocksPush(';',SEMICOLON);
            $bef=$i+1;
        }
    }
}
if(!substr($str,$bef) eq ''){
    blocksPush([substr($str,$bef),OTHERS]);
}
my @properties=selector(PROPERTY);
for(my $i=0,my $j=$#properties-1;$i<=$j;$i++){
    @blocks=getBlock();
    loop:for(my $i2=$properties[$i][2],my $j2=$properties[$i+1][2];$i2<$j2;$i2++){
        if($blocks[$i2][1]==SEMICOLON||$blocks[$i2][1]==RIGHT_CURLY_BRACKET){
            last loop;
        }
        if($blocks[$i2][1]==LEFT_CURLY_BRACKET){
            my @block=$blocks[$properties[$i][2]];
            $block[1]=OTHERS;
            setBlock($properties[$i][2],@block);
        }
    }
}
for(my $i=0;$i<=$#blocks;$i++){
    print 'Content:'.$blocks[$i][0]."\n";
    print 'Type:'.$InverseType[$blocks[$i][1]]."\n";
    print "-----------------------\n";
}
print "\n";
