use warnings;
@iparray= ( "the" , "the" ) ;
@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 "" )
{
push @oparray, "\\ s" ;
}
else
{
push @oparray , $word;
}
$temp--;
}
print @oparray;
if ( $upperlimit== scalar( @sortedarray) )
{
print "All the words are parsed" ;
last;
}
else
{
$lowerlimit= $upperlimit+ 1 ;
$count= $lowerlimit;
$inc= 1 ;
func( ) ;
}
}
}
sub func
{
if ( ( $sortedarray[ $count+ 1 ] ) eq "\0 " )
{
last;
}
$base= substr( $sortedarray[ $count] , 0 , $inc) ;
$match= substr( $sortedarray[ $count+ 1 ] , 0 , $inc) ;
print( "\n " , $base, " " , $match) ;
$count++;
if ( $base ne $match)
{
if ( $sortedarray[ $count- 1 ] eq $sortedarray[ $lowerlimit] )
{
$mat= $inc- 1 ;
print $mat;
splitter( ) ;
}
else
{
$inc++;
$count= $lowerlimit;
func( ) ;
}
}
else
{
$upperlimit= $count;
func( ) ;
}
}
func( ) ;
dXNlIHdhcm5pbmdzOwpAaXBhcnJheT0oInRoZSIsInRoZSIpOwpAc29ydGVkYXJyYXk9c29ydChAaXBhcnJheSk7Cm15IEBvcGFycmF5OwpteSAkbG93ZXJsaW1pdD0wOwpteSAkdXBwZXJsaW1pdDsKbXkgJGNvdW50PTA7Cm15ICRpbmM9MTsKbXkgJG1hdD0wOwpteSAkbWF0Y2hlZHN0cmluZzsKc3ViIHNwbGl0dGVyCnsKCWlmKCRtYXQ9PTApCgkJewoJCSRsb3dlcmxpbWl0PSRsb3dlcmxpbWl0KzE7CgkJJGNvdW50PSRsb3dlcmxpbWl0OwoJCWZ1bmMoKTsKCQl9CgllbHNlCgkJewoJCSRtYXRjaGVkc3RyaW5nPXN1YnN0cigkc29ydGVkYXJyYXlbJGNvdW50LTFdLDAsJG1hdCk7CgkJbXkgJHRlbXA9JHVwcGVybGltaXQ7CgkJd2hpbGUoJHRlbXA+PSRsb3dlcmxpbWl0KQoJCQl7CgkJCSR3b3JkPXN1YnN0cigkc29ydGVkYXJyYXlbJHRlbXBdLCRtYXQsbGVuZ3RoKCRzb3J0ZWRhcnJheVskdGVtcF0pKTsKCQkJaWYoJHdvcmQgZXEgIiIpCgkJCQl7CgkJCQlwdXNoIEBvcGFycmF5LCJcXHMiOwoJCQkJfQoJCQllbHNlCgkJCQl7CgkJCQlwdXNoIEBvcGFycmF5ICwkd29yZDsKCQkJCX0KCQkJJHRlbXAtLTsKCQkJfQoJCXByaW50IEBvcGFycmF5OwoJCWlmKCR1cHBlcmxpbWl0PT1zY2FsYXIoQHNvcnRlZGFycmF5KSkKCQkJewoJCQlwcmludCAiQWxsIHRoZSB3b3JkcyBhcmUgcGFyc2VkIjsKCQkJbGFzdDsKCQkJfQoJCWVsc2UKCQkJewoJCQkkbG93ZXJsaW1pdD0kdXBwZXJsaW1pdCsxOwoJCQkkY291bnQ9JGxvd2VybGltaXQ7CgkJCSRpbmM9MTsKCQkJZnVuYygpOwoJCQl9CgkJfQp9CnN1YiBmdW5jCnsKCWlmKCgkc29ydGVkYXJyYXlbJGNvdW50KzFdKSBlcSAiXDAiKQoJewoJbGFzdDsKCX0KCSRiYXNlPXN1YnN0cigkc29ydGVkYXJyYXlbJGNvdW50XSwwLCRpbmMpOwoJJG1hdGNoPXN1YnN0cigkc29ydGVkYXJyYXlbJGNvdW50KzFdLDAsJGluYyk7CglwcmludCgiXG4iLCRiYXNlLCIgIiwkbWF0Y2gpOwoJJGNvdW50Kys7CglpZigkYmFzZSBuZSAkbWF0Y2gpCgkJewoJCWlmKCRzb3J0ZWRhcnJheVskY291bnQtMV0gZXEgJHNvcnRlZGFycmF5WyRsb3dlcmxpbWl0XSkKCQkJewoJCQkkbWF0PSRpbmMtMTsKCQkJcHJpbnQgJG1hdDsKCQkJc3BsaXR0ZXIoKTsKCQkJfQoJCWVsc2UKCQkJewoJCQkkaW5jKys7CgkJCSRjb3VudD0kbG93ZXJsaW1pdDsKCQkJZnVuYygpOwoJCQl9CgkJfQoJZWxzZQoJCXsKCQkkdXBwZXJsaW1pdD0kY291bnQ7CgkJZnVuYygpOwoJCX0KfQpmdW5jKCk7Cg==