# Tcl, 192 characters. Unfortunately I can not post my solution directly, because I contains some unicode characters. So here is my utf-8 and base64 encoded solution: ZXZhbCBbemxpYiBpIFtlbmNvZGluZyBjb252ZXJ0dCB1bmljb2RlIOWFlearreODg++wjOqen+iGuOyk meqOoO+8n+qzmuGBu+iPh+uqkOSendOq4beH6oyD6b236Z2k64WC6ZaJ55KT6Zm344On76CN5I6F5rGa 57uE5JW/5I6i54qE77KV7qCH4reR56iR5J6Z4qCn6LWn7Jqp472r56Gj6pag4ZOL6JiK5rmP66KI6bGw 6JK674qO5KGO4L6a5ayj4aqi6ryN4rSa67KO6Ima7ria47a87YGU47GF6bqT5YKn4baY7LOW5bKg6oe7 7YeH5K+66Ju84Leq4b6c4p2C4aCX56e777q25LGU7Je765iG6K+W6pmn6oim5bGq6Jim452W4Z2O77Sd 5I+Q6ae66Z6c5JOy7qai5KOO5aiv4Le66aGh55G85pu+4puB75C64qmk5pqq6ayZ7KmY6Kal5Za87aKO 4YKC5ayy6qu67b+f7JKa7L6f4pKG6bGU5aOM5p2X5q6w7YKe6Iy27p+H5bWK5LSq6qWB7qWI4r2g5r+2 7LyW642845iV5ouY4puH64GT4Zux45C87aSn56KA6qOf56ad5oKV6KGr54CH6L645bmH6ayr55697qGs 7b6Q5LW447+VXV0= First decode the base64, then decode utf-8. It should become something like this: <!-- language: lang-tcl --> eval [zlib i [encoding convertt unicode ...some strange characters...]] You count characters, so I use 1 character for 2 bytes. The zlib is pretty self explanatory. `i` is just the the abbreviation of `inflate`. `eval`. Well. I don't have to explain that? After decoding it becomes <!-- language: lang-tcl --> proc v i {set ::m {};t $i set r [list [split $i {}]] lmap c [split $::m {}] {set c [dict get {\{ \} \} \{ {[} \] \] {[} ( ) ) ( < > > <} $c] lmap a $r[set r {}] {for {set i 0} \$i<=[llength $a] incr\ i {lappend r [linsert $a $i $c]}}} lsort -u [lmap a [lmap a $r {join $a {}}] {if {![t $a]} continue set\ a}] } proc t i {if {{}ne$i} {lmap r {{^(.*){(.*?)}(.*)$} {^(.*)\((.*?)\)(.*)$} {^(.*)<(.*?)>(.*)$} {^(.*)\[(.*?)\](.*)$}} {if {[regexp $r $i - 1 2 3]} {return [expr {[t $1$3]&[t $2]}]}};append ::m $i} {return 1};list 0} It defines 2 commands: `v`, the main program, and `t` which checks the input and place unmatched braces in the global variable `m`. `v` calls `t` with the input, insert the corresponding brace at all possible positions and use `t` again to filter the valid ones out. **Input**: 1. Parameter for `v` **Output**: A Tcl list with each possible valid permutation. They have all the same length. Example: % v << <<>> <><>