program ideone;
{$mode objfpc}{$H+}
uses
HeapTrc;
type
TNode = record
Name: String;
SubNodes: array of TNode;
end;
function Node(const AName: String): TNode;
begin
Result.Name := AName;
Result.SubNodes := nil;
end;
function Node(const AName: String; ASubNodes: array of TNode): TNode;
var
intNodeIdx: Integer;
begin
Result.Name := AName;
SetLength(Result.SubNodes, Length(ASubNodes));
for intNodeIdx := 0 to High(ASubNodes) do
Result.SubNodes[intNodeIdx] := ASubNodes[intNodeIdx];
end;
var
nodeRoot: TNode;
begin
nodeRoot := Node('Level 1, Root 1',
[
Node('Level 2, Leaf 1'),
Node('Level 2, Leaf 2'),
Node('Level 2, Root 1',
[
Node('Level 3, Leaf 1'),
Node('Level 3, Leaf 2'),
Node('Level 3, Root 1',
[
Node('Level 4, Leaf 1'),
Node('Level 4, Leaf 2')
])
]),
Node('Level 2, Leaf 3'),
Node('Level 2, Leaf 4'),
Node('Level 2, Root 2',
[
Node('Level 3, Leaf 1'),
Node('Level 3, Leaf 2')
])
]);
end.
cHJvZ3JhbSBpZGVvbmU7Cgp7JG1vZGUgb2JqZnBjfXskSCt9Cgp1c2VzCiAgSGVhcFRyYzsKCnR5cGUKICBUTm9kZSA9IHJlY29yZAogICAgTmFtZTogU3RyaW5nOwogICAgU3ViTm9kZXM6IGFycmF5IG9mIFROb2RlOwogIGVuZDsKCiAgZnVuY3Rpb24gTm9kZShjb25zdCBBTmFtZTogU3RyaW5nKTogVE5vZGU7CiAgYmVnaW4KICAgIFJlc3VsdC5OYW1lIDo9IEFOYW1lOwogICAgUmVzdWx0LlN1Yk5vZGVzIDo9IG5pbDsKICBlbmQ7CgogIGZ1bmN0aW9uIE5vZGUoY29uc3QgQU5hbWU6IFN0cmluZzsgQVN1Yk5vZGVzOiBhcnJheSBvZiBUTm9kZSk6IFROb2RlOwogIHZhcgogICAgaW50Tm9kZUlkeDogSW50ZWdlcjsKICBiZWdpbgogICAgUmVzdWx0Lk5hbWUgOj0gQU5hbWU7CiAgICBTZXRMZW5ndGgoUmVzdWx0LlN1Yk5vZGVzLCBMZW5ndGgoQVN1Yk5vZGVzKSk7CgogICAgZm9yIGludE5vZGVJZHggOj0gMCB0byBIaWdoKEFTdWJOb2RlcykgZG8KICAgICAgUmVzdWx0LlN1Yk5vZGVzW2ludE5vZGVJZHhdIDo9IEFTdWJOb2Rlc1tpbnROb2RlSWR4XTsKICBlbmQ7Cgp2YXIKICBub2RlUm9vdDogVE5vZGU7CmJlZ2luCiAgbm9kZVJvb3QgOj0gTm9kZSgnTGV2ZWwgMSwgUm9vdCAxJywKICBbCiAgICBOb2RlKCdMZXZlbCAyLCBMZWFmIDEnKSwKICAgIE5vZGUoJ0xldmVsIDIsIExlYWYgMicpLAogICAgTm9kZSgnTGV2ZWwgMiwgUm9vdCAxJywKICAgIFsKICAgICAgTm9kZSgnTGV2ZWwgMywgTGVhZiAxJyksCiAgICAgIE5vZGUoJ0xldmVsIDMsIExlYWYgMicpLAogICAgICBOb2RlKCdMZXZlbCAzLCBSb290IDEnLAogICAgICBbCiAgICAgICAgTm9kZSgnTGV2ZWwgNCwgTGVhZiAxJyksCiAgICAgICAgTm9kZSgnTGV2ZWwgNCwgTGVhZiAyJykKICAgICAgXSkKICAgIF0pLAogICAgTm9kZSgnTGV2ZWwgMiwgTGVhZiAzJyksCiAgICBOb2RlKCdMZXZlbCAyLCBMZWFmIDQnKSwKICAgIE5vZGUoJ0xldmVsIDIsIFJvb3QgMicsCiAgICBbCiAgICAgIE5vZGUoJ0xldmVsIDMsIExlYWYgMScpLAogICAgICBOb2RlKCdMZXZlbCAzLCBMZWFmIDInKQogICAgXSkKICBdKTsKZW5kLg==