Upward and onward to greater glory! May this challenge serve as (another) tribute to Stan Lee, who passed away aged 95.

Stan Lee has left us an invaluable legacy and a peculiar catch word: Excelsior. So here's a small challenge based on what he said it was its meaning:


  Finally, what does “Excelsior” mean? “Upward and onward to greater glory!”  That’s what I wish you whenever I finish tweeting! Excelsior!


Challenge

Given a series of non-negative integers, output a line with Excelsior! every time an integer is greater than the previous one.

Rules


Input will be an array of non-negative integers.
Output will consist of lines with the word Excelsior (case does matter) followed by as many ! as the length of the current run of increasingly greater numbers. You can also return an array of strings.
Input and output formats are flexible according to the site rules, so feel free to adapt them to your language formats. You can also add spaces at the end of the lines, or even extra new lines after or before the text if you need.


Examples

Input             Output
-----------------------------------
[3,2,1,0,5]       Excelsior!      // Excelsior because 5 &gt; 0

[1,2,3,4,5]       Excelsior!      // Excelsior because 2 &gt; 1
                  Excelsior!!     // Excelsior because 3 &gt; 2 (run length: 2)
                  Excelsior!!!    // Excelsior because 4 &gt; 3 (run length: 3)
                  Excelsior!!!!   // Excelsior because 5 &gt; 4 (run length: 4)

[]                &lt;Nothing&gt;

[42]              &lt;Nothing&gt;

[1,2,1,3,4,1,5]   Excelsior!      // Excelsior because 2 &gt; 1
                  Excelsior!      // Excelsior because 3 &gt; 1
                  Excelsior!!     // Excelsior because 4 &gt; 3 (run length: 2)
                  Excelsior!      // Excelsior because 5 &gt; 1

[3,3,3,3,4,3]     Excelsior!      // Excelsior because 4 &gt; 3


This is code-golf, so may the shortest code for each language win!
JavaScript (ES6), 58 54 bytes



a=&gt;a.map(c=&gt;a&lt;(a=c)?`Excelsior${s+='!'}
`:s='').join``


Try it online!

Commented

a =&gt;                           // a[] = input array, also used to store the previous value
  a.map(c =&gt;                   // for each value c in a[]:
    a &lt;                        //   compare the previous value
    (a = c)                    //   with the current one; update a to c
                               //   this test is always falsy on the 1st iteration
    ?                          //   if a is less than c:
      `Excelsior${s += '!'}\n` //     add a '!' to s and yield 'Excelsior' + s + linefeed
    :                          //   else:
      s = ''                   //     reset s to an empty string and yield an empty string
  ).join``                     // end of map(); join everything


Why re-using a[ ] to store the previous value is safe

There are three possible cases:


If \$a[\text{ }]\$ is empty, the callback function of .map() is not invoked at all and we just get an empty array, yielding an empty string.
If \$a[\text{ }]\$ contains exactly one element \$x\$, it is coerced to that element during the first (and unique) test a &lt; (a = c). So, we're testing \$x &lt; x\$, which is falsy. We get an array containing an empty string, yielding again an empty string.
If \$a[\text{ }]\$ contains several elements, it is coerced to NaN during the first test a &lt; (a = c). Therefore, the result is falsy and what's executed is the initialization of \$s\$ to an empty string -- which is what we want. The first meaningful comparison occurs at the 2nd iteration.