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
#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n, s;
	scanf("%d%d", &n, &s);
	vector<int> B(n+1,0);
	for(int i = 0; i < s; i++)
	{
		int x;
		scanf("%d", &x);
		B[x]=1;
	}
	vector<int> state(n+1,0);
	int new_A=n;
	vector<pair<int,int>>res;
	vector<int>res3;
	for(int i=1; i<=n; i++)
	{
		int st=0;
		for(int j=1; j*j<=i; j++)
			if(i%j==0)
			{
				st+=state[j];
				if(j*j!=i)
					st+=state[i/j];
			}
		//cout<<i<<" "<<st<<"\n";
		if(st%2!=B[i])
			if(B[i])
			{
				res.push_back({1,i});
				state[i]=1;
			}
			else
			{
				res3.push_back(i);
				res.push_back({2,++new_A});
				state[i]=1;
			}
	}
	if(res.size()==1)
	{
		printf("2\n3 1\n1 %d %d\n",n+1,res[0].second);
		return 0;
	}
	printf("%d\n", res.size()+res3.size()-1);
	for(int i=0; i<res3.size(); i++)
		printf("3 %d\n",res3[i]);
	printf("%d %d %d\n",res[1].first,res[0].second,res[1].second);
	for(int i=2; i<res.size(); i++)
		printf("%d %d %d\n",res[i].first,++new_A,res[i].second);
}