func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 305;   vector<pair<int, int> > e;   vector<int> b;   int a[MAXN];   bool mark[MAXN], x[MAXN][MAXN];   int n, k, m, cnt;   void add(int u, int v) {     if (x[u][v]) return;     cnt++;     e.push_back(pair<int, int>(u, v));     x[u][v] = x[v][u] = true;   }   void ghi() {     for (int i = 0; i < m; i++) printf( %d %d n , e[i].first, e[i].second);   }   int main() {     if (0) {       freopen( input.txt ,  r , stdin);       freopen( output.txt ,  w , stdout);     };     scanf( %d%d%d , &n, &m, &k);     for (int i = 1; i <= k; i++) scanf( %d , &a[i]), mark[a[i]] = true;     int nn = n - k;     if (k == n) {       puts( -1 );       return 0;     }     for (int i = 1; i <= n; i++)       if (!mark[i]) b.push_back(i);     add(a[1], b[0]);     if (cnt == m) {       ghi();       return 0;     }     for (int i = 0; i < nn - 1; i++) {       add(b[i], b[i + 1]);       if (cnt == m) {         ghi();         return 0;       }     }     add(b[nn - 1], a[2]);     for (int i = 2; i < k; i++) {       add(a[i], a[i + 1]);       if (cnt == m) {         ghi();         return 0;       }     }     for (int i = 0; i < nn - 1; i++)       for (int j = i + 1; j < nn; j++) {         add(b[i], b[j]);         if (cnt == m) {           ghi();           return 0;         }       }     for (int i = 2; i < k; i++)       for (int j = i + 1; j <= k; j++) {         add(a[i], a[j]);         if (cnt == m) {           ghi();           return 0;         }       }     for (int i = 0; i < nn; i++)       for (int j = 2; j <= k; j++) {         add(b[i], a[j]);         if (cnt == m) {           ghi();           return 0;         }       }     for (int i = 1; i < nn; i++) {       add(a[1], b[i]);       if (cnt == m) {         ghi();         return 0;       }     }     puts( -1 );     return 0;   }   