Let's build a Staircase We don't have enough (semi-)easy challenges for beginners. More and more of the easy ones are already taken. So I tried to come up with something that might be achievable by beginners, but that isn't a duplicate.
Input:
A single string separated with your OS new-line (i.e. \r\n),
or an array with multiple strings.
Output - The Stairs:
Remove all non-alphabetic and non-numeric symbols. So all that's left is [A-Za-z0-9]. And then 'build a stairs'; basically ordering them on length with the smallest at top and widest at the bottom.
Challenge rules:

When two strings are of equal length, we merge them with each other as one big string (the order doesn't matter, so it could be from first to last or last to first, whichever of the two you prefer).
The rule above can stack when the merged strings are of equal length again (see test case 2).

General rules:

The input is STDIN and contains only ASCII characters. And the output is STDOUT.
The case of the output must be the same as the input.
Each submission must be a full program able to compile and run, so not just a method/function. EDIT: I'm rather new, so perhaps it's indeed better to use the default from now on, even though I prefer a full program myself. Sorry for everyone that has already posted a full program. Feel free to edit, and I'll try to not change the post mid-challenge next time.
This is code-golf, so the shortest answer in bytes wins. I probably accept the shortest answer in a year from now.
Don't let code-golf answers discourage you from posting golfed non-codegolf languages like C# and alike! Try to come up with the shortest answer for any programming language.
Feel free to use newer languages than this question.


Test cases:
Input 1:
This is a sample text,
that you will have to use to build stairs.
The wood may be of excellent quality,
or pretty crappy almost falling apart and filled with termites.
Bla bla bla - some more text
Ok, that will do

Output 1:
Okthatwilldo
Thisisasampletext
Blablablasomemoretext
Thewoodmaybeofexcellentquality
thatyouwillhavetousetobuildstairs
orprettycrappyalmostfallingapartandfilledwithtermites


Input 2:
A
small
one
that
contains
equal
length
strings
for
the
special
rule

Output 2:
A                   Or alternatively:       A
length                                      length
oneforthe                                   theforone
smallequal                                  equalsmall
stringsspecial                              specialstrings
thatrulecontains                            containsrulethat

Steps explained of 2:
First order on length:
A
one
for
the
that
rule
small
equal
length
strings
special
contains

First merge:
A
oneforthe
thatrule
smallequal
length
stringsspecial
contains

Second order on length:
A
length
thatrule
contains
oneforthe
smallequal
stringsspecial

Second merge:
A
length
thatrulecontains
oneforthe
smallequal
stringsspecial

Third order on length:
A
length
oneforthe
smallequal
stringsspecial
thatrulecontains


Input 3:
Test,
test.
This
is
a
test.

Output 3:
a                   Or alternatively:       a
is                                          is
TesttestThistest                            testThistestTest


Input 4:
a
bc
d!
123

Output 4:
123     Or alternatively:    123
adbc                         dabc
Python 3, 264 Bytes
I'm not good at code golf so I'm confident this won't be the best Python 3 answer. This uses recursion and an ordered dict with all the words for each length.
from collections import*
def f(i):
 d = defaultdict(list)
 for l in i: x = &quot;&quot;.join(c for c in l if c.isalnum());d[len(x)].append(x)
 n = (sorted([&quot;&quot;.join(d[z]) for z in d.keys()], key=len))
 if n == i:return &quot;\n&quot;.join(n)
 return f(n)
print(f(eval(input())))

Takes input from stdin as a list, for example, test it with this list:
['A', 'small', 'one', 'that', 'contains', 'equal', 'length', 'strings', 'for', 'the', 'special', 'rule']

Will output:
A
length
oneforthe
smallequal
stringsspecial
thatrulecontains