#include #include using namespace std; using namespace atcoder; #define ll long long #define rep(i,a,b) for(int i=(a);i<(b);i++) #define repl(i,a,b) for(ll i=(a);i<(b);i++) #define all(a) (a).begin(),(a).end() #define rall(a) (a).rbegin(),(a).rend() template bool chmin(T &a,T b){if(a>b){a=b;return true;} return false;} template bool chmax(T &a,T b){if(a> n >> m >> k; if(k == 1){ if(m == n*(n-1)/2){ cout << "No\n"; } else{ cout << "Yes\n"; set> st; rep(i,0,n)rep(j,i+1,n){ if(st.size() == m) break; if(!(i == 0 && j == n-1)) st.insert({i,j}); } for(auto [u,v]:st){ cout << u+1 << " " << v+1 << "\n"; } } return; } if(k == n-1){ if(m != n*(n-1)/2-k){ cout << "No\n"; } else{ cout << "Yes\n"; rep(i,0,n)rep(j,i+2,n){ cout << i+1 << " " << j+1 << "\n"; } } return; } vector> gr(k+1); gr[0].push_back(0); rep(i,1,n-k+1)gr[1].push_back(i); rep(i,2,k+1){ gr[i].push_back(n-k-1+i); } set> st; rep(i,0,k+1)rep(j,i+2,k+1){ for(auto u:gr[i])for(auto v:gr[j]){ st.insert({u,v}); } } if(st.size()>m){ cout << "No\n"; return; } rep(i,1,gr[1].size()){ int u=0,v=gr[1][i]; if(st.size() == m) break; st.insert({u,v}); } rep(i,1,gr[1].size()){ int u=gr[1][i],v=gr[2][0]; if(st.size() == m) break; st.insert({u,v}); } if(st.size()> T; while(T--) solve(); }