1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
/*
 * Opis: Główny nagłówek
 */
#include<bits/stdc++.h>
using namespace std;
using LL=long long;
#define FOR(i,l,r)for(int i=(l);i<=(r);++i)
#define REP(i,n)FOR(i,0,(n)-1)
#define ssize(x)int(x.size())
#ifdef DEBUG
auto&operator<<(auto&o,pair<auto,auto>p){return o<<"("<<p.first<<", "<<p.second<<")";}
auto operator<<(auto&o,auto x)->decltype(x.end(),o){o<<"{";int i=0;for(auto e:x)o<<","+!i++<<e;return o<<"}";}
#define debug(X...)cerr<<"["#X"]: ",[](auto...$){((cerr<<$<<"; "),...)<<endl;}(X)
#else
#define debug(...){}
#endif

constexpr int MAXN = 5e4 + 1;


template<int N=8>
void solve(int n) {
	if (n + 1 > N) {
		return solve<min(2*N, MAXN)>(n);
	}
	vector<bitset<N>> base(n);
	FOR(i, 1, n) {
		for (int j = i; j <= n; j += i) {
			base[i-1].set(j);
		}
	}

	int s;
	cin >> s;
	bitset<N> finish;
	REP(i, s) {
		int a;
		cin >> a;
		finish.set(a);
	}

	int wh = -1;
	bitset<N> curr;
	FOR(i, 1, n) {
		if (finish.test(i)) {
			wh = i;
			curr = base[i-1];
			break;
		}
	}
	if (wh == -1) {
		cout << "1\n3 1\n";
		return;
	}
	vector<array<int, 3>> solution;
	FOR(i, wh+1, n) {
		debug(curr);
		if (curr.test(i) != finish.test(i)) {
			if (finish.test(i)) {
				solution.push_back({1, wh, i});
				curr = (curr | base[i-1]);
				wh = n + ssize(solution);
			}
			else {
				solution.push_back({3, i, -1});
				int new_wh = n + ssize(solution);
				solution.push_back({2, wh, new_wh});
				wh = new_wh + 1;
				curr = (curr & (~base[i-1]));
			}
		}
	}
	if (solution.empty()) {
		solution.push_back({3, wh, -1});
		solution.push_back({3, n+1, -1});
	}

	cout << ssize(solution) << "\n";
	for (auto [type, a, b] : solution) {
		cout << type << " " << a;
		if (b != -1) {
			cout << " " << b;
		}
		cout << "\n";
	}
}

int main() {
	cin.tie(0)->sync_with_stdio(0);
	int n;
	cin >> n;
	solve(n);
/*	int n, s;
	cin >> n >> s;
	vector<int> target(n + 1);
	REP(i, s) {
		int a;
		cin >> a;
		target[a] = 1;
	}
	vector<int> curr(n + 1);
*/	
}