const readline = require('readline');
// Create input interface
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// Store all input lines
const inputLines = [];
// Greet user and give instructions
console.log('Welcome! Please enter lines of text (one per line).');
console.log('When done, press Ctrl+D (Linux/macOS) or Ctrl+C (Windows) or Ctrl+Z then Enter (Windows).');
// Store each line
rl.on('line', (line) => {
inputLines.push(line.trim());
});
// When input ends, process and show output
rl.on('close', () => {
const output = [];
for (const line of inputLines) {
const freq = {};
for (const char of line) {
if (char !== ' ') {
freq[char] = (freq[char] || 0) + 1;
}
}
const hasExactlyTwo = Object.values(freq).some(count => count === 2);
if (hasExactlyTwo) {
output.push(line);
}
}
console.log('\nOutput:');
console.log(output.join('\n'));
});
Y29uc3QgcmVhZGxpbmUgPSByZXF1aXJlKCdyZWFkbGluZScpOwoKLy8gQ3JlYXRlIGlucHV0IGludGVyZmFjZQpjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7CiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbiwKICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQKfSk7CgovLyBTdG9yZSBhbGwgaW5wdXQgbGluZXMKY29uc3QgaW5wdXRMaW5lcyA9IFtdOwoKLy8gR3JlZXQgdXNlciBhbmQgZ2l2ZSBpbnN0cnVjdGlvbnMKY29uc29sZS5sb2coJ1dlbGNvbWUhIFBsZWFzZSBlbnRlciBsaW5lcyBvZiB0ZXh0IChvbmUgcGVyIGxpbmUpLicpOwpjb25zb2xlLmxvZygnV2hlbiBkb25lLCBwcmVzcyBDdHJsK0QgKExpbnV4L21hY09TKSBvciBDdHJsK0MgKFdpbmRvd3MpIG9yIEN0cmwrWiB0aGVuIEVudGVyIChXaW5kb3dzKS4nKTsKCi8vIFN0b3JlIGVhY2ggbGluZQpybC5vbignbGluZScsIChsaW5lKSA9PiB7CiAgICBpbnB1dExpbmVzLnB1c2gobGluZS50cmltKCkpOwp9KTsKCi8vIFdoZW4gaW5wdXQgZW5kcywgcHJvY2VzcyBhbmQgc2hvdyBvdXRwdXQKcmwub24oJ2Nsb3NlJywgKCkgPT4gewogICAgY29uc3Qgb3V0cHV0ID0gW107CgogICAgZm9yIChjb25zdCBsaW5lIG9mIGlucHV0TGluZXMpIHsKICAgICAgICBjb25zdCBmcmVxID0ge307CgogICAgICAgIGZvciAoY29uc3QgY2hhciBvZiBsaW5lKSB7CiAgICAgICAgICAgIGlmIChjaGFyICE9PSAnICcpIHsKICAgICAgICAgICAgICAgIGZyZXFbY2hhcl0gPSAoZnJlcVtjaGFyXSB8fCAwKSArIDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGNvbnN0IGhhc0V4YWN0bHlUd28gPSBPYmplY3QudmFsdWVzKGZyZXEpLnNvbWUoY291bnQgPT4gY291bnQgPT09IDIpOwoKICAgICAgICBpZiAoaGFzRXhhY3RseVR3bykgewogICAgICAgICAgICBvdXRwdXQucHVzaChsaW5lKTsKICAgICAgICB9CiAgICB9CgogICAgY29uc29sZS5sb2coJ1xuT3V0cHV0OicpOwogICAgY29uc29sZS5sb2cob3V0cHV0LmpvaW4oJ1xuJykpOwp9KTs=