#!/usr/bin/env python
import re
import sys
import xml.etree.cElementTree as etree
def getelements(source, tag):
context = iter(etree.iterparse(source, events=('start', 'end')))
_, root = next(context) # get root element
for event, elem in context:
if event == 'end' and elem.tag == tag:
yield elem
root.clear() # free memory
for elem in getelements(sys.stdin, 'person'):
print '^'.join(re.sub(r'\s+', ' ', elem.find(tag).text).strip() for tag in 'name age address'.split())
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCByZQppbXBvcnQgc3lzCmltcG9ydCB4bWwuZXRyZWUuY0VsZW1lbnRUcmVlIGFzIGV0cmVlCgpkZWYgZ2V0ZWxlbWVudHMoc291cmNlLCB0YWcpOgogICAgY29udGV4dCA9IGl0ZXIoZXRyZWUuaXRlcnBhcnNlKHNvdXJjZSwgZXZlbnRzPSgnc3RhcnQnLCAnZW5kJykpKQogICAgXywgcm9vdCA9IG5leHQoY29udGV4dCkgIyBnZXQgcm9vdCBlbGVtZW50CiAgICBmb3IgZXZlbnQsIGVsZW0gaW4gY29udGV4dDoKICAgICAgICBpZiBldmVudCA9PSAnZW5kJyBhbmQgZWxlbS50YWcgPT0gdGFnOgogICAgICAgICAgICB5aWVsZCBlbGVtCiAgICAgICAgICAgIHJvb3QuY2xlYXIoKSAjIGZyZWUgbWVtb3J5Cgpmb3IgZWxlbSBpbiBnZXRlbGVtZW50cyhzeXMuc3RkaW4sICdwZXJzb24nKToKICAgIHByaW50ICdeJy5qb2luKHJlLnN1YihyJ1xzKycsICcgJywgZWxlbS5maW5kKHRhZykudGV4dCkuc3RyaXAoKSBmb3IgdGFnIGluICduYW1lIGFnZSBhZGRyZXNzJy5zcGxpdCgpKQ==
Jmx0O2RhdGEmZ3Q7CiAgJmx0O3BlcnNvbiZndDsKICAgICAgICAmbHQ7bmFtZSZndDtUb20mbHQ7L25hbWUmZ3Q7CiAgICAgICAgJmx0O2FnZSZndDsxOCZsdDsvYWdlJmd0OwogICAgICAgICZsdDthZGRyZXNzJmd0OyBMb25kb24sIHh4eCBzdHJlZXQsIHh4eCBidWlsZGluZyZsdDsvYWRkcmVzcyZndDsKICAmbHQ7L3BlcnNvbiZndDsKICAmbHQ7cGVyc29uJmd0OwogICAgICAgICZsdDtuYW1lJmd0O0pvaG4mbHQ7L25hbWUmZ3Q7CiAgICAgICAgJmx0O2FnZSZndDsyMiZsdDsvYWdlJmd0OwogICAgICAgICZsdDthZGRyZXNzJmd0OyBDYW5iZXJyYSwgeHh4IHN0cmVldCwgeHh4IGJ1aWxkaW5nLCB4eHggZmxvb3IsIHh4eCByb29tLAogICAgICAgICAgICAgICAgIHh4eCAgYmVkJmx0Oy9hZGRyZXNzJmd0OwogICZsdDsvcGVyc29uJmd0OwombHQ7L2RhdGEmZ3Q7
<data>
<person>
<name>Tom</name>
<age>18</age>
<address> London, xxx street, xxx building</address>
</person>
<person>
<name>John</name>
<age>22</age>
<address> Canberra, xxx street, xxx building, xxx floor, xxx room,
xxx bed</address>
</person>
</data>