Given a set $S$ of $n$ variables, a binary operation $\times$ on $S$ is called [i]simple[/i] if it satisfies $(x \times y) \times z = x \times (y \times z)$ for all $x,y,z \in S$ and $x \times y \in \{x,y\}$ for all $x,y \in S$.  Given a simple operation $\times$ on $S$, any string of elements in $S$ can be reduced to a single element, such as $xyz \to x \times (y \times z)$.  A string of variables in $S$ is called[i] full [/i]if it contains each variable in $S$ at least once, and two strings are [i]equivalent[/i] if they evaluate to the same variable regardless of which simple $\times$ is chosen.  For example $xxx$, $xx$, and $x$ are equivalent, but these are only full if $n=1$.  Suppose $T$ is a set of strings such that any full string is equivalent to exactly one element of $T$.  Determine the number of elements of $T$.
1. **Define equivalence and equality for strings**:
   - For strings \( s_1, s_2 \), \( s_1 \equiv s_2 \) if they are equivalent under the operation \(\times\).
   - \( s_1 = s_2 \) if they consist of the same sequence of variables.

2. **Lemma**: \( xx \equiv x \)
   - Proof: \( xx \equiv x \times x \in \{x\} \implies xx \equiv x \)

3. **Lemma**: \( xaxbx \equiv xabx \)
   - Proof: 
     - If \( a \times x \equiv a \), then \( xaxbx \equiv x(a \times x)bx \equiv xabx \).
     - Assume \( a \times x \equiv x \) and \( x \times b \equiv x \):
       \[
       xaxbx \equiv x(ax)bx \equiv xxbx \equiv xxx \equiv x
       \]
     - Consider \( xabx \):
       - **Case 1**: \( a \times b \equiv a \)
         \[
         xabx \equiv xax \equiv x(ax) \equiv xx \equiv x \equiv xaxbx
         \]
       - **Case 2**: \( a \times b \equiv b \)
         \[
         xabx \equiv xbx \equiv (xb)x \equiv xx \equiv x \equiv xaxbx
         \]
     - In both cases, \( xaxbx \equiv xabx \).

4. **Define**:
   - A *rainbow* is a full string of exactly \( n \) variables in \( S \).
   - A *double rainbow* is two rainbows concatenated together.

5. **Lemma**: Every full string of variables in \( S \) is equivalent to a double rainbow.
   - Proof:
     - Consider a full string \( s \).
     - Let \( s_1 \) be the string remaining after deleting from \( s \) all but the first occurrence of each variable in \( S \).
     - Let \( s_2 \) be the string remaining after deleting from \( s \) all but the last occurrence of each variable in \( S \).
     - Since \( s \) is full, so are \( s_1 \) and \( s_2 \). Both \( s_1 \) and \( s_2 \) are rainbows.
     - Because \( xaxbx \equiv xabx \), any string is equivalent to the string remaining after deleting all but the first and last occurrence of a variable.
     - Hence, \( ss \equiv s_1s_2 \).
     - However, \( s \equiv ss \) and \( s_1s_2 \) is a double rainbow, so any full string \( s \) is equivalent to a double rainbow.

6. **Lemma**: All double rainbows are not equivalent to each other.
   - Proof:
     - Consider two double rainbows \( D \) and \( d \) with \( D \neq d \).
     - Let \( D = R_1R_2 \) where \( R_1, R_2 \) are each rainbows.
     - Similarly, let \( d = r_1r_2 \).
     - **Case 1**: \( R_1 \neq r_1 \)
       - \( R_1 \) and \( r_1 \) differ in at least 2 places. Let \( i \) be the smallest index such that \( R_1[i] \neq r_1[i] \).
       - Let \( m = R_1[i], n = r_1[i] \).
       - Construct a simple operation \(\times\) as follows:
         \[
         a \times b = \begin{cases} 
         a & \text{if } |a| \ge |b| \\
         b & \text{if } |a| < |b|
         \end{cases}
         \]
       - Map \( m, n \) both to 1, and all other variables in \( S \) to 0.
       - \( D \) evaluates to \( R_1 \) which evaluates to \( m \), while \( d \) evaluates to \( r_1 \) which evaluates to \( n \). Hence \( D \not\equiv d \).
     - **Case 2**: \( R_1 = r_1 \implies R_2 \neq r_2 \)
       - Let \( i \) be the largest index such that \( R_2[i] \neq r_2[i] \).
       - Let \( m = R_2[i], n = r_2[i] \).
       - Construct a simple operation \(\times\) as follows:
         \[
         a \times b = \begin{cases} 
         a & \text{if } |a| > |b| \\
         b & \text{if } |a| \le |b|
         \end{cases}
         \]
       - Map \( m, n \) to 1, the rest of the variables in \( S \) to 0.
       - \( D \) evaluates to \( m \), while \( d \) evaluates to \( n \). Hence \( D \not\equiv d \).
     - In both cases, \( D \not\equiv d \).

7. **Conclusion**:
   - Any full string is equivalent to exactly one double rainbow.
   - \( T \) is the set of all double rainbows.
   - A double rainbow can be bijected to 2 permutations of the first \( n \) natural numbers.
   - Therefore, there are \( n!^2 \) double rainbows.

The final answer is \( \boxed{ n!^2 } \)