#include <iostream>
#include <iomanip>
struct Tabular {
size_t width;
std::ios_base&(*flag)(std::ios_base&);
Tabular(): width(10), flag(std::left) {}
template<typename T>
Tabular& operator<<(const T& data) {
std::cout << flag << std::setw(width) << data;
return *this;
}
Tabular& operator<<(const char& ch) {
if(ch == '\n' || ch == '\t')
std::cout << ch;
else
std::cout << flag << std::setw(width) << ch;
return *this;
}
Tabular& operator<<(std::ostream&(*out)(std::ostream&)) {
std::cout << out;
return *this;
}
};
int main() {
Tabular out;
out.width = 20;
out << "Person 1" << 1.2 << "Text" << '\n';
out << "Person 2" << 10 << "Text 2" << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KCnN0cnVjdCBUYWJ1bGFyIHsKICAgIHNpemVfdCB3aWR0aDsKICAgIHN0ZDo6aW9zX2Jhc2UmKCpmbGFnKShzdGQ6Omlvc19iYXNlJik7CiAgICBUYWJ1bGFyKCk6IHdpZHRoKDEwKSwgZmxhZyhzdGQ6OmxlZnQpIHt9CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgVGFidWxhciYgb3BlcmF0b3I8PChjb25zdCBUJiBkYXRhKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8IGZsYWcgPDwgc3RkOjpzZXR3KHdpZHRoKSA8PCBkYXRhOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIFRhYnVsYXImIG9wZXJhdG9yPDwoY29uc3QgY2hhciYgY2gpIHsKICAgICAgICBpZihjaCA9PSAnXG4nIHx8IGNoID09ICdcdCcpCiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBjaDsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBmbGFnIDw8IHN0ZDo6c2V0dyh3aWR0aCkgPDwgY2g7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogICAgVGFidWxhciYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mKCpvdXQpKHN0ZDo6b3N0cmVhbSYpKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8IG91dDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cn07CgoKCmludCBtYWluKCkgewogICAgVGFidWxhciBvdXQ7CiAgICBvdXQud2lkdGggPSAyMDsKICAgIG91dCA8PCAiUGVyc29uIDEiIDw8IDEuMiA8PCAiVGV4dCIgPDwgJ1xuJzsKICAgIG91dCA8PCAiUGVyc29uIDIiIDw8IDEwIDw8ICAiVGV4dCAyIiA8PCBzdGQ6OmVuZGw7Cn0=