func_code_string: #include <bits/stdc++.h>   using namespace std;   int a[310], g[310][310], use[310];   int tm;   void add(int x, int y) {     g[x][y] = g[y][x] = 1;     tm++;   }   int main() {     int n, m, K;     scanf( %d%d%d , &n, &m, &K);     for (int i = 0; i < K; i++) {       scanf( %d , &a[i]);       use[a[i]] = 1;     }     sort(a, a + K);     memset(g, 0, sizeof(g));     int ck = -1;     for (int i = 1; i <= n; i++)       if (!use[i]) ck = i;     if (ck == -1) {       puts( -1 );       return 0;     }     tm = 0;     add(a[0], ck);     add(ck, a[1]);     for (int i = 1; i < K - 1; i++) add(a[i], a[i + 1]);     int pre = a[K - 1];     for (int i = 1; i <= n; i++) {       if (use[i]) continue;       if (i == ck) continue;       add(pre, i);       pre = i;     }     for (int i = 1; i <= n; i++)       for (int j = i + 1; j <= n; j++) {         if (g[i][j] == 1) continue;         if (tm == m) continue;         if (i == a[0] && j == a[1]) continue;         if (i == a[0] || j == a[0]) {           int ti;           if (i == a[0])             ti = j;           else             ti = i;           if (use[ti] && g[ti][a[1]]) continue;         }         if (i == a[1] || j == a[1]) {           int ti;           if (i == a[1])             ti = j;           else             ti = i;           if (use[ti] && g[ti][a[0]]) continue;         }         add(i, j);       }     if (tm != m) {       puts( -1 );       return 0;     }     for (int i = 1; i <= n; i++)       for (int j = i + 1; j <= n; j++)         if (g[i][j]) printf( %d %d n , i, j);     return 0;   }   