rendered paste body#include<iostream>#include<vector>#include<algorithm>#include<queue>using namespace std;#define BLACK 100#define WHITE 200#define FOR(i,n) for(int i=0;i<n;i++)int **A;int n;class Graph{ public: void assign(int **a); Graph() { count=0; } int Dfs(int st); int DfsVisit(int u,int color); void printBest(); void setBest(); private: int A[101][101]; int N,count; int colour[101]; bool isColoured[101]; int best[101];}g; void Graph::setBest(){ FOR(i,n) best[i]=colour[i];}void Graph::assign(int **a){ N=n; count=0; FOR(i,n){ colour[i]=0; isColoured[i]=-1; FOR(j,n) A[i][j]=a[i][j]; }}void Graph::printBest(){ vector<int> best1; FOR(i,N) if(best[i]==BLACK) best1.push_back(i+1); int len=best1.size(); FOR(i,len) { cout<<best1[i]; if(i==len-1) cout<<"\n"; else cout<<" "; } } int Graph::Dfs(int st){ colour[st]=BLACK; DfsVisit(st,BLACK); count++; FOR(i,N){ if(!colour[i]){ bool flag=true; FOR(j,N){ if(A[i][j]&&colour[j]==BLACK){ flag=false; break; } } if(flag){ colour[i]=BLACK; count++; } else colour[i]=WHITE; DfsVisit(i,colour[i]); } } return count;}int Graph::DfsVisit(int u,int color){ FOR(i,N){ if(A[u][i]&&!colour[i]){ bool flag=true; if(color==WHITE) FOR(j,N){ if(A[i][j]&&colour[j]==BLACK){ flag=false; break; } } if(color==WHITE&&flag){ colour[i]=BLACK; count++; } else colour[i]=WHITE; DfsVisit(i,colour[i]); } } return 0;} int main(){ int k,x,y; int test; cin>>test; A=new int*[101]; FOR(i,101) A[i]=new int[101]; while(test--){ cin>>n>>k; FOR(i,n) FOR(j,n) A[i][j]=0; FOR(i,k) { cin>>x>>y; A[x-1][y-1]=1; A[y-1][x-1]=1; } int mc=-1,c=0; FOR(i,n) { g.assign(A); c=g.Dfs(i); if(mc<c){ mc=c; g.setBest(); } } cout<<mc<<endl; g.printBest(); } return 0;}