program ideone;
Uses sysutils;
const
Samples: array [0 .. 9] of AnsiString = ('zero', 'one', 'two', 'three',
'four', 'five', 'six', 'seven', 'eight', 'nine');
var
BigCount, SamCount: array [Ord('a') .. Ord('z')] of Integer;
Big, OutS: AnsiString;
i, j, k, n, r: Integer;
Res: Boolean;
ch: AnsiChar;
begin
Randomize;
for r := 1 to 4 do begin
n := 2 + random(9);
Big := '';
OutS := '';
for i := 0 to n - 1 do
Big := Big + Samples[Random(10)];
Writeln(Big);
//Pascal strings numbered from 1
for i := Length(Big) downto 2 do begin //shuffle chars
j := 1 + random(i);
ch := Big[i];
Big[i] := Big[j];
Big[j] := ch;
end;
Writeln(Big);
FillChar(BigCount, SizeOf(BigCount), 0); //string char counts
for i := 1 to Length(Big) do
Inc(BigCount[Ord(Big[i])]);
for k := 0 to 4 do begin //even numbers
j := 2 * k;
FillChar(SamCount, SizeOf(SamCount), 0); //sample[j] char counts
for i := 1 to Length(Samples[j]) do
Inc(SamCount[Ord(Samples[j][i])]);
Res := True;
while Res do begin
for i := Ord('a') to Ord('z') do
if SamCount[i] > BigCount[i] then begin
Res := False;
Break;
end;
if Res then begin //word found, just add index
OutS := OutS + IntToStr(j);
for i := Ord('a') to Ord('z') do
BigCount[i] := BigCount[i] - SamCount[i];
end;
end;
end;
for k := 0 to 4 do begin //odd numbers
j := 2 * k + 1;
FillChar(SamCount, SizeOf(SamCount), 0);
for i := 1 to Length(Samples[j]) do
Inc(SamCount[Ord(Samples[j][i])]);
Res := True;
while Res do begin
for i := Ord('a') to Ord('z') do
if SamCount[i] > BigCount[i] then begin
Res := False;
Break;
end;
if Res then begin //word found, insert index in the right place in sorted order
n := Length(OutS);
ch := AnsiChar(j + Ord('0'));
while (n > 0) and (ch < OutS[n]) do
Dec(n);
Insert(ch, OutS, n + 1);
for i := Ord('a') to Ord('z') do
BigCount[i] := BigCount[i] - SamCount[i];
end;
end;
end;
Writeln(OutS);
end;
end.
cHJvZ3JhbSBpZGVvbmU7ClVzZXMgc3lzdXRpbHM7CmNvbnN0CiAgU2FtcGxlczogYXJyYXkgWzAgLi4gOV0gb2YgQW5zaVN0cmluZyA9ICgnemVybycsICdvbmUnLCAndHdvJywgJ3RocmVlJywKICAgICdmb3VyJywgJ2ZpdmUnLCAnc2l4JywgJ3NldmVuJywgJ2VpZ2h0JywgJ25pbmUnKTsKdmFyCiAgQmlnQ291bnQsIFNhbUNvdW50OiBhcnJheSBbT3JkKCdhJykgLi4gT3JkKCd6JyldIG9mIEludGVnZXI7CiAgQmlnLCBPdXRTOiBBbnNpU3RyaW5nOwogIGksIGosIGssIG4sIHI6IEludGVnZXI7CiAgUmVzOiBCb29sZWFuOwogIGNoOiBBbnNpQ2hhcjsKYmVnaW4KIFJhbmRvbWl6ZTsKIGZvciByIDo9IDEgdG8gNCBkbyBiZWdpbgogIG4gOj0gMiArIHJhbmRvbSg5KTsKICBCaWcgOj0gJyc7CiAgT3V0UyA6PSAnJzsKICBmb3IgaSA6PSAwIHRvIG4gLSAxIGRvCiAgICBCaWcgOj0gQmlnICsgU2FtcGxlc1tSYW5kb20oMTApXTsKICBXcml0ZWxuKEJpZyk7CiAgLy9QYXNjYWwgc3RyaW5ncyBudW1iZXJlZCBmcm9tIDEKICBmb3IgaSA6PSBMZW5ndGgoQmlnKSBkb3dudG8gMiBkbyBiZWdpbiAgIC8vc2h1ZmZsZSBjaGFycwogICAgICAgaiA6PSAxICsgcmFuZG9tKGkpOwogICAgICAgY2ggOj0gQmlnW2ldOwogICAgICAgQmlnW2ldIDo9IEJpZ1tqXTsKICAgICAgIEJpZ1tqXSA6PSBjaDsKICBlbmQ7CiAgICBXcml0ZWxuKEJpZyk7CgogIEZpbGxDaGFyKEJpZ0NvdW50LCBTaXplT2YoQmlnQ291bnQpLCAwKTsgLy9zdHJpbmcgY2hhciBjb3VudHMKICBmb3IgaSA6PSAxIHRvIExlbmd0aChCaWcpIGRvCiAgICBJbmMoQmlnQ291bnRbT3JkKEJpZ1tpXSldKTsKCiAgZm9yIGsgOj0gMCB0byA0IGRvIGJlZ2luICAgLy9ldmVuIG51bWJlcnMKICAgIGogOj0gMiAqIGs7CiAgICBGaWxsQ2hhcihTYW1Db3VudCwgU2l6ZU9mKFNhbUNvdW50KSwgMCk7IC8vc2FtcGxlW2pdIGNoYXIgY291bnRzCiAgICBmb3IgaSA6PSAxIHRvIExlbmd0aChTYW1wbGVzW2pdKSBkbwogICAgICBJbmMoU2FtQ291bnRbT3JkKFNhbXBsZXNbal1baV0pXSk7CiAgICBSZXMgOj0gVHJ1ZTsKICAgIHdoaWxlIFJlcyBkbyBiZWdpbgogICAgICBmb3IgaSA6PSBPcmQoJ2EnKSB0byBPcmQoJ3onKSBkbwogICAgICAgIGlmIFNhbUNvdW50W2ldID4gQmlnQ291bnRbaV0gdGhlbiBiZWdpbgogICAgICAgICAgUmVzIDo9IEZhbHNlOwogICAgICAgICAgQnJlYWs7CiAgICAgICAgZW5kOwogICAgICBpZiBSZXMgdGhlbiBiZWdpbiAvL3dvcmQgZm91bmQsIGp1c3QgYWRkIGluZGV4CiAgICAgICAgT3V0UyA6PSBPdXRTICsgSW50VG9TdHIoaik7CiAgICAgICAgZm9yIGkgOj0gT3JkKCdhJykgdG8gT3JkKCd6JykgZG8KICAgICAgICAgIEJpZ0NvdW50W2ldIDo9IEJpZ0NvdW50W2ldIC0gU2FtQ291bnRbaV07CiAgICAgIGVuZDsKICAgIGVuZDsKICBlbmQ7CgogIGZvciBrIDo9IDAgdG8gNCBkbyBiZWdpbiAgICAvL29kZCBudW1iZXJzCiAgICBqIDo9IDIgKiBrICsgMTsKICAgIEZpbGxDaGFyKFNhbUNvdW50LCBTaXplT2YoU2FtQ291bnQpLCAwKTsKICAgIGZvciBpIDo9IDEgdG8gTGVuZ3RoKFNhbXBsZXNbal0pIGRvCiAgICAgIEluYyhTYW1Db3VudFtPcmQoU2FtcGxlc1tqXVtpXSldKTsKICAgIFJlcyA6PSBUcnVlOwogICAgd2hpbGUgUmVzIGRvIGJlZ2luCiAgICAgIGZvciBpIDo9IE9yZCgnYScpIHRvIE9yZCgneicpIGRvCiAgICAgICAgaWYgU2FtQ291bnRbaV0gPiBCaWdDb3VudFtpXSB0aGVuIGJlZ2luCiAgICAgICAgICBSZXMgOj0gRmFsc2U7CiAgICAgICAgICBCcmVhazsKICAgICAgICBlbmQ7CiAgICAgIGlmIFJlcyB0aGVuIGJlZ2luICAvL3dvcmQgZm91bmQsIGluc2VydCBpbmRleCBpbiB0aGUgcmlnaHQgcGxhY2UgaW4gc29ydGVkIG9yZGVyCiAgICAgICAgbiA6PSBMZW5ndGgoT3V0Uyk7CiAgICAgICAgY2ggOj0gQW5zaUNoYXIoaiArIE9yZCgnMCcpKTsKICAgICAgICB3aGlsZSAobiA+IDApIGFuZCAoY2ggPCBPdXRTW25dKSBkbwogICAgICAgICAgRGVjKG4pOwogICAgICAgIEluc2VydChjaCwgT3V0UywgbiArIDEpOwogICAgICAgIGZvciBpIDo9IE9yZCgnYScpIHRvIE9yZCgneicpIGRvCiAgICAgICAgICBCaWdDb3VudFtpXSA6PSBCaWdDb3VudFtpXSAtIFNhbUNvdW50W2ldOwogICAgICBlbmQ7CiAgICBlbmQ7CiAgZW5kOwogIFdyaXRlbG4oT3V0Uyk7CiBlbmQ7IAplbmQu