sub expand { local $_ = shift; my @a; (@a=/^(.*?)\{([^}]+)\}(.*)$/)?map(expand($a[0].$_.$a[2]),split/,/,$a[1]): (@a=/^(.*?)\[(\d+):(\d+)\](.*)$/)?map(expand($a[0].$_.$a[3]),$a[1]..$a[2]): $_ }