CPD6Z98SB2KQNWV0F7Y1IX4GLRA5MTOJHE3U CXZOL6SUI2WTJ30HF519YPGBRNAK48MQVD7E T8COSQU6I2FJN40DKL157WVGPYXARZ3MBHE9 KNCWVZDSR5420LP91FIQGB7Y3A6J8MOUXTEH XF9C4PSDY62TWJ0QBN17IKG3OH8ALVRM5UEZ D9QCHUSN7TW2YZL0O831FGXIR6JA4P5MVBKE ZC7ISQUPK6N20OLV4T31G9FRXBAWM5YJHED8 Z3C7SJVODL25TRQ01HPWGNKXB4UA68YMI9EF BC9OXDHS2FI5Z6U0TYL1VPGQK7ANR38MEWJ4 K4TCQBHS2ZV7FXU0P8R1YGDON3A6JILM9EW5 #### my @str = map {chomp; $_} ; print LCS(@str), "\n"; sub LCS{ my ($d,$s,%l,%t)=(0,''); my @p=map{my $i=$_;({map{substr($_[$i],$_,1),$_}0..length($_[$i])-1})}0..$#_; my @o=map{my $l=$_;my $r=[map $p[$_]{$l},0..$#p];$l{$r}=[$r,$l];$r}split//,$_[0]; for my $i(0..$#o){$t{$o[$i]}=[map{g($o[$i],$o[$_])?"$o[$_]":()}grep$_!=$i,0..$#o]} my @w=map[$_,1],grep@{$t{$_}},keys%t; while(@w){my $i=pop@w;($s,$d)=@$i if$i->[1]>$d; my @n=@{$t{(split/:/,$i->[0])[-1]}}or next;push@w,map["$i->[0]:$_",$i->[1]+1],@n} join'',map$l{$_}[1],split/:/,$s; } sub g{$_[1]->[$_]<=$_[0]->[$_]&&return 0 for 0..(@{$_[0]}>@{$_[1]}?$#{$_[1]}:$#{$_[0]});1}