C (gcc), 790 778 757 748 731 687 bytes
typedef struct F F;typedef struct{int c,p;F**m;}g;struct F{int d;g f;};g S,y,q,*x=&y,*p=&q;A(g*g,F*s){g->c++[g->m=g->c-g->p?g->m:realloc(g->m,(g->p+=32)*20)]=s;}i,*a,c[999],b,j,k,l;*B(d){F*s=0;for(i=S.c;i--;)s=S.m[i]->d-d?s:S.m[i];!s?s=calloc(5,4),s->d=d,A(&S,s):0;return s;}F*u,*v;E(){for(i=-1;b=++i<S.c;b&&A(x,S.m[i]))for(l=0;k=l<x->c&b;b&=!k)for(j=0,u=x->m[l++];j<u->f.c&&(k=u->f.m[j++]->d-S.m[i]->d););x->c>p->c?a=x,x=p,p=a:0;x->c=0;}main(){for(;~scanf("%d %d",&a,&b)&&A(&(u=B(a))->f,v=B(b))|~A(&v->f,u););for(E();i=b<S.c;)c[b]<b?a=S.m[i=b%2*c[b]++],S.m[i]=S.m[b],E(S.m[b]=a):(c[b++]=0);for(printf("largest clique size: %d\nclique members:",p->c);i<p->c;)printf(" %d",p->m[i++]->d);}
This is a slightly golfed version of the reference implementation. Try it online!
Slightly golfed less
typedef struct F F;
// student group
typedef struct{
int c, // count
p; // capacity
F**m; // members
}g;
// student
struct F{
int d; // id
g f; // friends
};
g S,y,q,*x=&y,*p=&q;
A(g*g,F*s){
g->c++[g->m=g->c-g->p?g->m:realloc(g->m,(g->p+=32)*20)]=s;
}
i,*a,c[999],b,j,k,l;
*B(d){
F*s=0;
for(i=S.c;i--;)
s=S.m[i]->d-d?
s
:
S.m[i];
!s?
s=calloc(5,4),
s->d=d,A(&S,s)
:
0;
return s;
}
F*u,*v;
E(){
for(i=-1;b=++i<S.c;b&&A(x,S.m[i]))
for(l=0;k=l<x->c&b;b&=!k)
for(j=0,u=x->m[l++];j<u->f.c&&(k=u->f.m[j++]->d-S.m[i]->d););
x->c>p->c?a=x,x=p,p=a:0;
x->c=0;
}
main(){
for(;~scanf("%d %d",&a,&b)&&A(&(u=B(a))->f,v=B(b))|~A(&v->f,u););
for(E();i=b<S.c;)
c[b]<b?
a=S.m[i=b%2*c[b]++],
S.m[i]=S.m[b],
E(S.m[b]=a)
:
(c[b++]=0);
for(printf("largest clique size: %d\nclique members:",p->c);i<p->c;)
printf(" %d",p->m[i++]->d);
}