Let $G$ be a finite non-abelian $p$-group, where $p$ is a prime. An automorphism $\alpha$ of $G$ is called a class-preserving if for each $x\in G$, there exists an element $g_x\in G$ such that $\alpha(x)=g_x^{-1}xg_x$. An automorphism $\alpha$ of $G$ is called a $2$nd class-preserving if for each $x\in G$, there exists an element $g_x\in G'=[G,G]$ such that $\alpha(x)=g_x^{-1}xg_x$. Let $\mathrm{Aut_c}(G)$ and $\mathrm{Aut_c^2}(G)$ respectively denote the group of all class-preserving and $2$nd class-preserving automorphisms of $G$. I have made a GAP program to find the structure of $\mathrm{Aut_c}(G)$ but I failed to make a GAP program to find the structure of $\mathrm{Aut_c^2}(G)$. The GAP program to find the structure of $\mathrm{Aut_c}(G)$ is following: ClassPreservingAuts:= function(G) local A,I,cc,gens,auts,a,ok,i,hom; A:=AutomorphismGroup(G); I:=InnerAutomorphismsAutomorphismGroup(A); hom:=NaturalHomomorphismByNormalSubgroup(A,I); cc:=ConjugacyClasses(G); gens:=[]; auts:=Group([One(A)]); $\sharp$ check for class preserving for a in Elements(A) do ok:=true; $\sharp$ run through classes i:=0; while i$<$Length(cc) and ok=true do i:=i+1; if not (Representative(cc[i])^a in cc[i]) then ok:=false; fi; od; $\sharp$ a is class preserving if ok=true and not (a in auts) then Add (gens,a); auts:= Group(gens); $\sharp$inng:=Image(hom(x)); $\sharp$gens:=GeneratorsOfGroup(inng); fi; od; return auts; return auts/I; return Size(auts)/Size(I); end; My question is the following: >Can anybody help me to make a GAP program to find the structure of $\mathrm{Aut_c^2}(G)$?