Jooel
I admire your skills as golfer (barber?). You shave them quite short.
646
Code:

Function s($)
Dim $j, $k, $b, $v
Dim $a[$+$]
For $j = 0 to $+$
$a[$j] = $j-$
Next

$s = d($s,$a)

For $k = 1 to $
For $j = 1 to $k
$a = c($j,$a)
$s = d($s,$a)
Next
$k=$k+($>$k)
For $j = -1 to -$k step -1
$a = c($j,$a)
$s = d($s,$a)
Next
Next
If $ MOD 2
For $k = 1 to $
For $j = $k to $
$a = c($j,$a)
$s = d($s,$a)
Next
$k=$k+($>$k)
If $k < $
For $j = -$k to -$ step -1
$a = c($j,$a)
$s = d($s,$a)
Next
EndIf
Next
Else
For $j = 1 to $
$a = c($j,$a)
$s = d($s,$a)
Next
For $k = 1 to $
For $j = -$k to -$ step -1
$a = c($j,$a)
$s = d($s,$a)
Next
$k=$k+($>$k)
For $j = $k to $
$a = c($j,$a)
$s = d($s,$a)
Next
Next
EndIf
$s=Split($s,a)
EndFunction

Function c($a,$)
Dim $!
$! = AScan($,$a)
$[AScan($,0)]=$a
$[$!]=0
$c = $
EndFunction

Function d($,$s)
If $
$d = $ + a
EndIf

For Each $ In $s
$d= $d + SubStr("W B",1+($=0)+2*($>),1)
EndFunction