#include <bits/stdc++.h> 
#define fp( i , x , y ) for( int i=(x); i<=(y); ++i ) 
#define fq( i , x , y ) for( int i=(y); i>=(x); --i ) 
using namespace std ; 
const int N = 605 , M = 2e6+10 ; 
int a[N][2] , top[N] , bel[N] , b[M] , len , n , m , K ; 
struct node { int op , x , y ; } ans[M*2] ; 
void OP1( int x ) { ans[++len] = (node){ 1 , x , 0 } ; } 
void OP2( int x , int y ) { ans[++len] = (node){ 2 , x , y } ; } 
void print( ) { 
  fp( i , 1 , len ) { 
    cout << ans[i].op << ' ' << ans[i].x ;   
    if( ans[i].op == 2 ) cout << ' ' << ans[i].y ; 
    cout << '\n' ; 
  } 
} 
int F() { 
  fp( i , 1 , n-1 ) 
    if( top[i] < 2 ) return i ; 
  return -1 ;   
} 
void solve( ) { 
  len = 0 ; 
  cin >> n >> m >> K ; 
  fp( i , 1 , m ) cin >> b[i] ; 
  if( n == 1 ) { 
    cout << m << '\n' ; 
    fp( i , 1 , m ) cout << 1 << ' ' << 1 << '\n' ; 
    return ; 
  } 
  int x , y , p , tp , nx , ny ; 
  fp( i , 1 , m ) { 
    x = b[i] ; p = bel[x] ; 
    if( p ) { 
      y = ( a[p][1] == x ) ; 
     // cout << "N : " << i << ' ' << p << ' ' << a[p][1] << ' ' << x << ' ' << y << '\n' ; 
	  if( y == 1 ) { OP1( p ) ; a[p][1] = 0 ; } 
	  else { 
	    OP1( n ) ; OP2( n , p ) ; 
		a[p][0] = a[p][1] ; a[p][1] = 0 ; 
	  } 
	  top[p] -- ; bel[x] = 0 ; 
	} else { 
	  tp = F( ) ; bel[x] = tp ; OP1( tp ) ; 
	  a[tp][top[tp]++] = x ; 
	//  cout << "I : " << tp << ' ' << a[tp][0] << ' ' << a[tp][1] << '\n' ;
	} 
  } 
  print() ; 
} 
signed main( ) { 
  freopen( "meow.in" , "r" , stdin ) ; 
  freopen( "meow.out" , "w" , stdout ) ; 
  ios::sync_with_stdio(false) ; 
  cin.tie(0) ; 
  int T ; cin >> T ; 
  while( T -- ) solve() ;  
  return 0 ; 
} 
/*

1
2 4 2
1 2 1 2


*/
