CJam, 70 6262 59 bytes
Qali{_'L:Xf+\'S:Yf++}*{[_\{X2*_X2*/Xf-Yf/Xf*Y*_Xf*Y*}h]N*_X3*#\Y2*#=},p The idea is to push all strings of L's ansand S's of the proper length, successively apply the transformation to each until the result is an empty string, concatenate the sequences of strings and search for the forbidden substrings.
(to be continued)
Qa " Push R := [ '' ]. "; li{ " Do the following int(input()) times: "; _'L:Xf+ " Append (X := 'L') to a copy of all strings in R. "; \'S:Yf+ " Append (Y := 'S') to all original strings in R. "; + " Concatenate the arrays into R. "; }* " R now contains all strings of L's and S's of length int(input()). "; { " For each S ∊ R: "; { " "; _ " Push a copy of S. "; X2*/ " Split S at 'LL'. "; Xf- " Remove 'L' from the chunks. "; Yf/ " Split the chunks at 'S'. "; Xf* " Join the chunks, separating by 'L'. "; Y* " Join, separating by 'S'. "; }h " If the resulting string is non-empty, repeat. "; ]N* " Join the array of resulting strings from S to '', separating by linefeeds. "; _X3*# " Push the index of 'LLL' a copy in the resulting string (-1 if not present). "; \Y2*# " Push the index of 'SS' in the original string (-1 if not present). "; = " Check if the indexes are equal; this happens if and only if both are -1. "; }, " Filter: Keep S in R if and only if = pushed 1. "; p " Print a string representation of R. ";