use warnings;
my @iparray = ( "return" , "revert" , "reveal" , "rebel" , "real" , "relm" , "reign" , "response" ) ;
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 ) ; }
else
{
last ;
}
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 ) ; }
else
{
last ;
}
if ( $s eq $base )
{
$upperlimit = $count ;
$count = $lowerlimit ;
$inc ++;
#print $inc;
func( ) ;
}
else
{
last ;
}
}
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( ) ;
dXNlIHdhcm5pbmdzOwpteSBAaXBhcnJheT0oInJldHVybiIsInJldmVydCIsInJldmVhbCIsInJlYmVsIiwicmVhbCIsInJlbG0iLCJyZWlnbiIsInJlc3BvbnNlIik7Cm15IEBzb3J0ZWRhcnJheT1zb3J0KEBpcGFycmF5KTsKbXkgQG9wYXJyYXk7Cm15ICRsb3dlcmxpbWl0PTA7Cm15ICR1cHBlcmxpbWl0OwpteSAkY291bnQ9MDsKbXkgJGluYz0xOwpteSAkbWF0PTA7Cm15ICRtYXRjaGVkc3RyaW5nOwpzdWIgc3BsaXR0ZXIKewoJaWYoJG1hdD09MCkKCQl7CgkJJGxvd2VybGltaXQ9JGxvd2VybGltaXQrMTsKCQkkY291bnQ9JGxvd2VybGltaXQ7CgkJZnVuYygpOwoJCX0KCWVsc2UKCQl7CgkJJG1hdGNoZWRzdHJpbmc9c3Vic3RyKCRzb3J0ZWRhcnJheVskY291bnQtMV0sMCwkbWF0KTsKCQlteSAkdGVtcD0kdXBwZXJsaW1pdDsKCQkKCQlwcmludCgiXG4iLCR0ZW1wKTsKCQkKCQl3aGlsZSgkdGVtcD49JGxvd2VybGltaXQpCgkJCXsKCQkJJHdvcmQ9c3Vic3RyKCRzb3J0ZWRhcnJheVskdGVtcF0sJG1hdCxsZW5ndGgoJHNvcnRlZGFycmF5WyR0ZW1wXSkpOwoJCQlpZigkd29yZCBlcSAiIikKCQkJCXsKCQkJCXB1c2ggQG9wYXJyYXksIlxccyI7CgkJCQl9CgkJCWVsc2UKCQkJCXsKCQkJCXB1c2ggQG9wYXJyYXkgLCR3b3JkOwoJCQkJfQoJCQkJCgkJCSR0ZW1wLS07CgkJCX0JCQoJCXByaW50ICgiXG4iLEBvcGFycmF5KTsKCQlwcmludCgiXG4iLCR1cHBlcmxpbWl0KTsKCQlpZigoJHVwcGVybGltaXQpPT0oc2NhbGFyKEBzb3J0ZWRhcnJheSktMSkpCgkJCXsKCQkJZGllICJUZXJtaW5hdGVkICI7CgkJCSNwcmludCAkdXBwZXJsaW1pdCsxOwoJCQkjcHJpbnQgIkFsbCB0aGUgd29yZHMgYXJlIHBhcnNlZCI7CgkJCSNsYXN0OwoJCQl9CgkJZWxzZQoJCQl7CgkJCSRsb3dlcmxpbWl0PSR1cHBlcmxpbWl0KzE7CgkJCSRjb3VudD0kbG93ZXJsaW1pdDsKCQkJJGluYz0xOwoJCQlmdW5jKCk7CgkJCX0KCQl9Cn0KcHJpbnQgIkFsbCB0aGUgd29yZHMgYXJlIHBhcnNlZCI7CnN1YiBmdW5jCnsKaWYgKGRlZmluZWQgJHNvcnRlZGFycmF5WyRjb3VudF0pCgl7CgkkYmFzZT1zdWJzdHIoJHNvcnRlZGFycmF5WyRjb3VudF0sMCwkaW5jKTsKCX0KCWVsc2UKCXsKCWxhc3Q7Cgl9CglpZiAoZGVmaW5lZCAkc29ydGVkYXJyYXlbJGNvdW50KzFdKQoJewoJCSRtYXRjaD1zdWJzdHIoJHNvcnRlZGFycmF5WyRjb3VudCsxXSwwLCRpbmMpIDsKCX0KCWVsc2UKCXsKCWlmIChkZWZpbmVkICRzb3J0ZWRhcnJheVskY291bnQtMV0pCgl7CgkJJHM9c3Vic3RyKCRzb3J0ZWRhcnJheVskY291bnQtMV0sMCwkaW5jKTsKCQl9CgkJZWxzZQoJCXsKCQlsYXN0OwoJCX0KCQlpZigkcyBlcSAkYmFzZSkKCQl7CgkJJHVwcGVybGltaXQ9JGNvdW50OwoJCSRjb3VudCA9ICRsb3dlcmxpbWl0OwoJCSRpbmMrKzsKCQkjcHJpbnQgJGluYzsKCQlmdW5jKCk7CgkJfQoJCWVsc2UKCQl7CgkJbGFzdDsKCQl9Cgl9CglwcmludCgiXG4iLCRiYXNlLCIgIiwkbWF0Y2gpOwoJJGNvdW50Kys7CglpZigkYmFzZSBuZSAkbWF0Y2gpCgkJewoJCWlmKCgkY291bnQtMSkgPT0gJGxvd2VybGltaXQpCgkJCXsKCQkJbXkgJGxjb3VudD0kY291bnQ7CgkJCW15ICR1Y291bnQ9JGNvdW50KzE7CgkJCWlmKCR1Y291bnQ+PXNjYWxhcihAc29ydGVkYXJyYXkpKQoJCQkJewoJCQkJJHVwcGVybGltaXQ9JGNvdW50OwoJCQkJJG1hdD0kaW5jLTE7CgkJCQlzcGxpdHRlcigpOwoJCQkJfQoJCQllbHNlCgkJCQl7CgkJCW15ICR1bGltaXQ9JHVwcGVybGltaXQ7CgkJCXByaW50KCJcbiIsJGxjb3VudCwiXG4iLCR1Y291bnQsIlxuIiwkdWxpbWl0KTsKCQkJd2hpbGUoJHVsaW1pdD49JGNvdW50KQoJCQkJCXsKCQkJCW15ICRuZXc9c3Vic3RyKCRzb3J0ZWRhcnJheVskbGNvdW50XSwwLCRpbmMpOwoJCQkJcHJpbnQoIlxuIiwkbmV3KTsKCQkJCW15ICRuZXcxPXN1YnN0cigkc29ydGVkYXJyYXlbJHVjb3VudF0sMCwkaW5jKTsKCQkJCXByaW50KCIgIiwkbmV3MSk7CgkJCQlpZigkbmV3IGVxICRuZXcxKQoJCQkJCQl7CgkJCQkJJHVwcGVybGltaXQ9JGxjb3VudC0xOwoJCQkJCXByaW50KCJcbiIsJHVwcGVybGltaXQpOwoJCQkJCSRtYXQ9JGluYy0xOwoJCQkJCXByaW50KCJcbiIsJG1hdCk7CgkJCQkJc3BsaXR0ZXIoKTsKCQkJCQkJfQoJCQkJCWVsc2UKCQkJCQkJewoJCQkJCSR1bGltaXQtLTsKCQkJCQkkbGNvdW50Kys7CgkJCQkJJHVjb3VudCsrOwoJCQkJCXByaW50KCJcbiIsJGxjb3VudCwiXG4iLCR1Y291bnQsIlxuIiwkdWxpbWl0KTsKCQkJCQkJfQoJCQkJCX0KCQkJJG1hdD0kaW5jLTE7CgkJCXByaW50ICRtYXQ7CgkJCXNwbGl0dGVyKCk7CgkJCQl9CgkJCX0KCQllbHNlCgkJCXsKCQkJJGluYysrOwoJCQlwcmludCAkaW5jOwoJCQl1bmxlc3MoKCRjb3VudCkgPT0gJHVwcGVybGltaXQpCgkJCQl7CgkJCQkkY291bnQ9JGxvd2VybGltaXQ7CgkJCQlmdW5jKCk7CgkJCQl9CQkJCQoJCQl9CgkJfQoJZWxzZQoJCXsKCQkkdXBwZXJsaW1pdD0kY291bnQ7CgkJZnVuYygpOwoJCX0KfQpmdW5jKCk7Cg==