HelpWTck:=proc(): print(`WhatTypeG(pi) `): end: reverse:=proc(L,i,j) local n,k: n:=nops(L): [op(1..i-1, L), seq(L[n-k], k = n-j .. n-i), op(j+1..n, L)]: end: posi:=proc(pi,a) local i: for i from 1 to nops(pi) do if pi[i]=a then return i: fi: od: return FAIL: end: SRS:=proc(pi) local i,j,n,L,Id,L1: n:=nops(pi): L:=pi: L1:=[]: Id:=[seq(i,i=1..n)]: for i from 1 to n-1 do j:=posi(L,i): if j<>i then L:=reverse(L,i,j): L1:=[op(L1),[i,j]]: fi: if L=Id then return L,L1: fi: od: return L,L1: end: b:=proc(pi) local i,n: n:=0: for i from 1 to nops(pi)-1 do if abs(pi[i+1]-pi[i])<>1 then n:=n+1: fi: od: return n: end: BRS:=proc(pi) local L,n,i,j,min,s,L1: n:=nops(pi): L1:=[]: L:=[0,op(pi),n+1]: while b(L)>0 do min:=n: for i from 2 to n do for j from i+1 to n+1 do if b(reverse(L,i,j))1 then if L[i][2]-L[i][1]=-1 then return 1: fi: fi: od: for i from 1 to nops(L) do if nops(L[i])>1 then if L[i][2]-L[i][1]=1 then return [add(nops(L[j]),j=1..i-1)+1,add(nops(L[j]),j=1..i)]: fi: fi: od: return 1: end: IBRS:=proc(pi) local L,n,i,j,min,s,L1: n:=nops(pi): L1:=[]: L:=[0,op(pi),n+1]: while b(L)>0 do min:=n: if Strip(L)=1 then for i from 2 to n do for j from i+1 to n+1 do if b(reverse(L,i,j))nops(M) then L:=[op(L),0]: L1:=[op(L1),nops(pi)]: fi: elif l2=FAIL then if l1=2 then L:=[[0,SimaoHerdade(M[1])],[1,SimaoHerdade(M[l1])]]: L1:=[nops(M[1]),nops(M[1])+nops(M[2])]: else L:=[[0,SimaoHerdade(M[1])],0,[1,SimaoHerdade(M[l1])]]: L1:=[nops(M[1]),add(nops(M[i]),i=1..l1-1),add(nops(M[i]),i=1..l1)]: fi: if l1<>nops(M) then L:=[op(L),0]: L1:=[op(L1),nops(pi)]: fi: elif l1>l2 then if l2=2 then L:=[[0,SimaoHerdade(M[1])],[-1,SimaoHerdade(M[l2])]]: L1:=[nops(M[1]),nops(M[1])+nops(M[2])]: else L:=[[0,SimaoHerdade(M[1])],0,[-1,SimaoHerdade(M[l2])]]: L1:=[nops(M[1]),add(nops(M[i]),i=1..l2-1),add(nops(M[i]),i=1..l2)]: fi: if l1-l2=1 then L:=[op(L),[1,SimaoHerdade(M[l1])]]: L1:=[op(L1),add(nops(M[i]),i=1..l1)]: else L:=[op(L),0,[1,SimaoHerdade(M[l1])]]: L1:=[op(L1),add(nops(M[i]),i=1..l1-1),add(nops(M[i]),i=1..l1)]: fi: if l1<>nops(M) then L:=[op(L),0]: L1:=[op(L1),nops(pi)]: fi: else if l1=2 then L:=[[0,SimaoHerdade(M[1])],[1,SimaoHerdade(M[l1])]]: L1:=[nops(M[1]),nops(M[1])+nops(M[2])]: else L:=[[0,SimaoHerdade(M[1])],0,[1,SimaoHerdade(M[l1])]]: L1:=[nops(M[1]),add(nops(M[i]),i=1..l1-1),add(nops(M[i]),i=1..l1)]: fi: if l2-l1=1 then L:=[op(L),[-1,SimaoHerdade(M[l2])]]: L1:=[op(L1),add(nops(M[i]),i=1..l2)]: else L:=[op(L),0,[-1,SimaoHerdade(M[l2])]]: L1:=[op(L1),add(nops(M[i]),i=1..l2-1),add(nops(M[i]),i=1..l2)]: fi: if l2<>nops(M) then L:=[op(L),0]: L1:=[op(L1),nops(pi)]: fi: fi: return L,L1: end: