use warnings;
my @iparray=("qua","aqua","backwa","kkokoko");
my @sortedarray=sort(@iparray); my @oparray;
my $lowerlimit=0;
my $upperlimit;
my $count=0;
my $inc=1;
my $mat=0;
my $matchedstring;
sub splitter
{
if($mat==0)
{
$lowerlimit=$lowerlimit+1;
$count=$lowerlimit;
func();
}
else
{
$matchedstring=substr($sortedarray[$count-1],0,$mat); my $temp=$upperlimit;
while($temp>=$lowerlimit)
{
$word=substr($sortedarray[$temp],$mat,length($sortedarray[$temp])); if($word eq "")
{
}
else
{
}
$temp--;
}
if(($upperlimit)==(scalar(@sortedarray)-1)) {
#print $upperlimit+1;
#print "All the words are parsed";
#last;
}
else
{
$lowerlimit=$upperlimit+1;
$count=$lowerlimit;
$inc=1;
func();
}
}
}
print "All the words are parsed"; sub func
{
{
$base=substr($sortedarray[$count],0,$inc); }
if (defined $sortedarray[$count+1]) {
$match=substr($sortedarray[$count+1],0,$inc) ; }
else
{
if (defined $sortedarray[$count-1]) {
$s=substr($sortedarray[$count-1],0,$inc); }
if($s eq $base)
{
$upperlimit=$count;
$count = $lowerlimit;
$inc++;
#print $inc;
func();
}
else
{
}
}
print("\n",$base," ",$match); $count++;
if($base ne $match)
{
if(($count-1) == $lowerlimit)
{
my $lcount=$count;
my $ucount=$count+1;
if($ucount>=scalar(@sortedarray)) {
$upperlimit=$count;
$mat=$inc-1;
splitter();
}
else
{
my $ulimit=$upperlimit;
print("\n",$lcount,"\n",$ucount,"\n",$ulimit); while($ulimit>=$count)
{
my $new=substr($sortedarray[$lcount],0,$inc); my $new1=substr($sortedarray[$ucount],0,$inc); if($new eq $new1)
{
$upperlimit=$lcount-1;
$mat=$inc-1;
splitter();
}
else
{
$ulimit--;
$lcount++;
$ucount++;
print("\n",$lcount,"\n",$ucount,"\n",$ulimit); }
}
$mat=$inc-1;
splitter();
}
}
else
{
$inc++;
unless(($count) == $upperlimit)
{
$count=$lowerlimit;
func();
}
}
}
else
{
$upperlimit=$count;
func();
}
}
func();
dXNlIHdhcm5pbmdzOwpteSBAaXBhcnJheT0oInF1YSIsImFxdWEiLCJiYWNrd2EiLCJra29rb2tvIik7Cm15IEBzb3J0ZWRhcnJheT1zb3J0KEBpcGFycmF5KTsKbXkgQG9wYXJyYXk7Cm15ICRsb3dlcmxpbWl0PTA7Cm15ICR1cHBlcmxpbWl0OwpteSAkY291bnQ9MDsKbXkgJGluYz0xOwpteSAkbWF0PTA7Cm15ICRtYXRjaGVkc3RyaW5nOwpzdWIgc3BsaXR0ZXIKewoJaWYoJG1hdD09MCkKCQl7CgkJJGxvd2VybGltaXQ9JGxvd2VybGltaXQrMTsKCQkkY291bnQ9JGxvd2VybGltaXQ7CgkJZnVuYygpOwoJCX0KCWVsc2UKCQl7CgkJJG1hdGNoZWRzdHJpbmc9c3Vic3RyKCRzb3J0ZWRhcnJheVskY291bnQtMV0sMCwkbWF0KTsKCQlteSAkdGVtcD0kdXBwZXJsaW1pdDsKCQkKCQlwcmludCgiXG4iLCR0ZW1wKTsKCQkKCQl3aGlsZSgkdGVtcD49JGxvd2VybGltaXQpCgkJCXsKCQkJJHdvcmQ9c3Vic3RyKCRzb3J0ZWRhcnJheVskdGVtcF0sJG1hdCxsZW5ndGgoJHNvcnRlZGFycmF5WyR0ZW1wXSkpOwoJCQlpZigkd29yZCBlcSAiIikKCQkJCXsKCQkJCXB1c2ggQG9wYXJyYXksIlxccyI7CgkJCQl9CgkJCWVsc2UKCQkJCXsKCQkJCXB1c2ggQG9wYXJyYXkgLCR3b3JkOwoJCQkJfQoJCQkJCgkJCSR0ZW1wLS07CgkJCX0JCQoJCXByaW50ICgiXG4iLEBvcGFycmF5KTsKCQlwcmludCgiXG4iLCR1cHBlcmxpbWl0KTsKCQlpZigoJHVwcGVybGltaXQpPT0oc2NhbGFyKEBzb3J0ZWRhcnJheSktMSkpCgkJCXsKCQkJZGllICJUZXJtaW5hdGVkICI7CgkJCSNwcmludCAkdXBwZXJsaW1pdCsxOwoJCQkjcHJpbnQgIkFsbCB0aGUgd29yZHMgYXJlIHBhcnNlZCI7CgkJCSNsYXN0OwoJCQl9CgkJZWxzZQoJCQl7CgkJCSRsb3dlcmxpbWl0PSR1cHBlcmxpbWl0KzE7CgkJCSRjb3VudD0kbG93ZXJsaW1pdDsKCQkJJGluYz0xOwoJCQlmdW5jKCk7CgkJCX0KCQl9Cn0KcHJpbnQgIkFsbCB0aGUgd29yZHMgYXJlIHBhcnNlZCI7CnN1YiBmdW5jCnsKaWYgKGRlZmluZWQgJHNvcnRlZGFycmF5WyRjb3VudF0pCgl7CgkkYmFzZT1zdWJzdHIoJHNvcnRlZGFycmF5WyRjb3VudF0sMCwkaW5jKTsKCX0KCWlmIChkZWZpbmVkICRzb3J0ZWRhcnJheVskY291bnQrMV0pCgl7CgkJJG1hdGNoPXN1YnN0cigkc29ydGVkYXJyYXlbJGNvdW50KzFdLDAsJGluYykgOwoJfQoJZWxzZQoJewoJaWYgKGRlZmluZWQgJHNvcnRlZGFycmF5WyRjb3VudC0xXSkKCXsKCQkkcz1zdWJzdHIoJHNvcnRlZGFycmF5WyRjb3VudC0xXSwwLCRpbmMpOwoJCX0KCQlpZigkcyBlcSAkYmFzZSkKCQl7CgkJJHVwcGVybGltaXQ9JGNvdW50OwoJCSRjb3VudCA9ICRsb3dlcmxpbWl0OwoJCSRpbmMrKzsKCQkjcHJpbnQgJGluYzsKCQlmdW5jKCk7CgkJfQoJCWVsc2UKCQl7CgkJZGllIk9oIG15IGdvZCI7CgkJfQoJfQoJcHJpbnQoIlxuIiwkYmFzZSwiICIsJG1hdGNoKTsKCSRjb3VudCsrOwoJaWYoJGJhc2UgbmUgJG1hdGNoKQoJCXsKCQlpZigoJGNvdW50LTEpID09ICRsb3dlcmxpbWl0KQoJCQl7CgkJCW15ICRsY291bnQ9JGNvdW50OwoJCQlteSAkdWNvdW50PSRjb3VudCsxOwoJCQlpZigkdWNvdW50Pj1zY2FsYXIoQHNvcnRlZGFycmF5KSkKCQkJCXsKCQkJCSR1cHBlcmxpbWl0PSRjb3VudDsKCQkJCSRtYXQ9JGluYy0xOwoJCQkJc3BsaXR0ZXIoKTsKCQkJCX0KCQkJZWxzZQoJCQkJewoJCQlteSAkdWxpbWl0PSR1cHBlcmxpbWl0OwoJCQlwcmludCgiXG4iLCRsY291bnQsIlxuIiwkdWNvdW50LCJcbiIsJHVsaW1pdCk7CgkJCXdoaWxlKCR1bGltaXQ+PSRjb3VudCkKCQkJCQl7CgkJCQlteSAkbmV3PXN1YnN0cigkc29ydGVkYXJyYXlbJGxjb3VudF0sMCwkaW5jKTsKCQkJCXByaW50KCJcbiIsJG5ldyk7CgkJCQlteSAkbmV3MT1zdWJzdHIoJHNvcnRlZGFycmF5WyR1Y291bnRdLDAsJGluYyk7CgkJCQlwcmludCgiICIsJG5ldzEpOwoJCQkJaWYoJG5ldyBlcSAkbmV3MSkKCQkJCQkJewoJCQkJCSR1cHBlcmxpbWl0PSRsY291bnQtMTsKCQkJCQlwcmludCgiXG4iLCR1cHBlcmxpbWl0KTsKCQkJCQkkbWF0PSRpbmMtMTsKCQkJCQlwcmludCgiXG4iLCRtYXQpOwoJCQkJCXNwbGl0dGVyKCk7CgkJCQkJCX0KCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkkdWxpbWl0LS07CgkJCQkJJGxjb3VudCsrOwoJCQkJCSR1Y291bnQrKzsKCQkJCQlwcmludCgiXG4iLCRsY291bnQsIlxuIiwkdWNvdW50LCJcbiIsJHVsaW1pdCk7CgkJCQkJCX0KCQkJCQl9CgkJCSRtYXQ9JGluYy0xOwoJCQlwcmludCAkbWF0OwoJCQlzcGxpdHRlcigpOwoJCQkJfQoJCQl9CgkJZWxzZQoJCQl7CgkJCSRpbmMrKzsKCQkJcHJpbnQgJGluYzsKCQkJdW5sZXNzKCgkY291bnQpID09ICR1cHBlcmxpbWl0KQoJCQkJewoJCQkJJGNvdW50PSRsb3dlcmxpbWl0OwoJCQkJZnVuYygpOwoJCQkJfQkJCQkKCQkJfQoJCX0KCWVsc2UKCQl7CgkJJHVwcGVybGltaXQ9JGNvdW50OwoJCWZ1bmMoKTsKCQl9Cn0KZnVuYygpOwo=