function is_empty(stack:string):boolean;
begin
is_empty:=length(stack)=0;
end;
function top(stack:string):char;
begin
top:=stack[length(stack)];
end;
function push(stack:string;item:char):string;
begin
push:=stack+item;
end;
function pop(stack:string):string;
begin
setlength(stack,length(stack)-1);
pop:=stack;
end;
function anagrammer(orig:string; samp:string; stack:string):integer;
var
count:integer;
newstack:string;
begin
count:=0;
if samp='' then anagrammer:=1
else
begin
if (not is_empty(stack)) and (top(stack)=samp[1]) then
begin
newstack:=pop(stack);
count:=count+anagrammer(orig,copy(samp,2,length(samp)),newstack);
end;
if length(orig)>0 then
begin
newstack:=push(stack,orig[1]);
count:=count+anagrammer(copy(orig,2,length(orig)),samp,newstack);
end;
anagrammer:=count;
end;
end;
begin
writeln(anagrammer('TORT','TROT',''));
writeln(anagrammer('MADAM','ADAMM',''));
writeln(anagrammer('LONG','GONG',''));
writeln(anagrammer('AAAAAAAA','AAAAAAAA',''));
end.
ZnVuY3Rpb24gaXNfZW1wdHkoc3RhY2s6c3RyaW5nKTpib29sZWFuOwpiZWdpbgoJaXNfZW1wdHk6PWxlbmd0aChzdGFjayk9MDsKZW5kOwoKZnVuY3Rpb24gdG9wKHN0YWNrOnN0cmluZyk6Y2hhcjsKYmVnaW4KCXRvcDo9c3RhY2tbbGVuZ3RoKHN0YWNrKV07CmVuZDsKCmZ1bmN0aW9uIHB1c2goc3RhY2s6c3RyaW5nO2l0ZW06Y2hhcik6c3RyaW5nOwpiZWdpbgoJcHVzaDo9c3RhY2sraXRlbTsKZW5kOwoKZnVuY3Rpb24gcG9wKHN0YWNrOnN0cmluZyk6c3RyaW5nOwpiZWdpbgoJc2V0bGVuZ3RoKHN0YWNrLGxlbmd0aChzdGFjayktMSk7Cglwb3A6PXN0YWNrOwplbmQ7CgpmdW5jdGlvbiBhbmFncmFtbWVyKG9yaWc6c3RyaW5nOyBzYW1wOnN0cmluZzsgc3RhY2s6c3RyaW5nKTppbnRlZ2VyOwp2YXIKCWNvdW50OmludGVnZXI7CgluZXdzdGFjazpzdHJpbmc7CmJlZ2luCgljb3VudDo9MDsKCWlmIHNhbXA9JycgdGhlbiBhbmFncmFtbWVyOj0xCgllbHNlCgliZWdpbgoJCWlmIChub3QgaXNfZW1wdHkoc3RhY2spKSBhbmQgKHRvcChzdGFjayk9c2FtcFsxXSkgdGhlbgoJCWJlZ2luCgkJCW5ld3N0YWNrOj1wb3Aoc3RhY2spOwoJCQljb3VudDo9Y291bnQrYW5hZ3JhbW1lcihvcmlnLGNvcHkoc2FtcCwyLGxlbmd0aChzYW1wKSksbmV3c3RhY2spOwoJCWVuZDsKCQkJCgkJaWYgbGVuZ3RoKG9yaWcpPjAgdGhlbgoJCWJlZ2luCgkJCW5ld3N0YWNrOj1wdXNoKHN0YWNrLG9yaWdbMV0pOwoJCQljb3VudDo9Y291bnQrYW5hZ3JhbW1lcihjb3B5KG9yaWcsMixsZW5ndGgob3JpZykpLHNhbXAsbmV3c3RhY2spOwoJCWVuZDsKCQlhbmFncmFtbWVyOj1jb3VudDsKCWVuZDsKZW5kOwoKYmVnaW4KCXdyaXRlbG4oYW5hZ3JhbW1lcignVE9SVCcsJ1RST1QnLCcnKSk7Cgl3cml0ZWxuKGFuYWdyYW1tZXIoJ01BREFNJywnQURBTU0nLCcnKSk7Cgl3cml0ZWxuKGFuYWdyYW1tZXIoJ0xPTkcnLCdHT05HJywnJykpOwoJd3JpdGVsbihhbmFncmFtbWVyKCdBQUFBQUFBQScsJ0FBQUFBQUFBJywnJykpOwplbmQu