import std; void main () { int N, Q; readln.read(N, Q); auto X = new int[](N); foreach (i; 0 .. N) { X[i] = readln.chomp.to!int; } auto Y = X.dup; Y = Y.sort.uniq.array; if (Q < Y.length + N) { writeln("No"); return; } writeln("Yes"); int[int] idof; int xi = 0; foreach (i; 0 .. Q) { if (i < Y.length) { writefln("1 %s %s", i + 2, Y[i]); idof[Y[i]] = i + 2; continue; } if (xi < N) { writefln("2 %s", idof[X[xi]]); xi++; continue; } writefln("1 %s %s", 1, 1); } } void read (T...) (string S, ref T args) { import std.conv : to; import std.array : split; auto buf = S.split; foreach (i, ref arg; args) { arg = buf[i].to!(typeof(arg)); } }