#include #define rep(i, n) for (int i = 0; i < (int)(n); i++) using LI = long long int; using LD = long double; using namespace std; template using APQUE = priority_queue, greater>; template using DPQUE = priority_queue; int main() { int n, q; cin >> n >> q; vector printed(n); rep(i, n) { cin >> printed[i]; } map already_exist; already_exist[0] = 1; int nextplace = 2; rep(i, n) { if (printed[i] != 0) { if (!already_exist.contains(printed[i])) { already_exist[printed[i]] = nextplace; nextplace++; } } } if (q < n + (already_exist.size() - 1)) { cout << "No" << endl; return 0; } cout << "Yes" << endl; for (auto i : already_exist) { if (i.first != 0) { cout << "1 " << i.second << " " << i.first << endl; } } for (auto i : printed) { cout << "2 " << already_exist[i] << endl; } rep(i, q - (already_exist.size() - 1 + printed.size())) { cout << "1 1 1" << endl; } }