#include <algorithm>
#include <cstdio>
#include <iostream>
#include <iterator>
#include <string>
#include <utility>
#include <vector>
using namespace std;
typedef pair<vector<string>, vector<double>> TransactionList;
template <typename T>
TransactionList getTransactionsForSearchCriteria(TransactionList result, T criteria) {
auto& attribute = get<vector<T>>(result);
auto it = lower_bound(attribute.begin(), attribute.end(), criteria);
//check that criteria matches transaction attribute
if(it != attribute.end() && *it == criteria) {
cout << criteria << " is a duplicate\n";
}
attribute.insert(it, criteria);
return result;
}
int main() {
TransactionList result;
size_t size;
double num;
string i;
while(cin >> i) {
if(sscanf(i.c_str(), "%lf%n", &num, &size) == 1 && size == i.size()) {
result = getTransactionsForSearchCriteria(result, num);
} else {
result = getTransactionsForSearchCriteria(result, i);
}
}
cout << "Strings:\n\t";
copy(result.first.cbegin(), result.first.cend(), ostream_iterator<string>(cout, " "));
cout << "\nDoubles:\n\t";
copy(result.second.cbegin(), result.second.cend(), ostream_iterator<double>(cout, " "));
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDx1dGlsaXR5PgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgcGFpcjx2ZWN0b3I8c3RyaW5nPiwgdmVjdG9yPGRvdWJsZT4+IFRyYW5zYWN0aW9uTGlzdDsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpUcmFuc2FjdGlvbkxpc3QgZ2V0VHJhbnNhY3Rpb25zRm9yU2VhcmNoQ3JpdGVyaWEoVHJhbnNhY3Rpb25MaXN0IHJlc3VsdCwgVCBjcml0ZXJpYSkgewogICAgYXV0byYgYXR0cmlidXRlID0gZ2V0PHZlY3RvcjxUPj4ocmVzdWx0KTsKICAgIGF1dG8gaXQgPSBsb3dlcl9ib3VuZChhdHRyaWJ1dGUuYmVnaW4oKSwgYXR0cmlidXRlLmVuZCgpLCBjcml0ZXJpYSk7CgogICAgLy9jaGVjayB0aGF0IGNyaXRlcmlhIG1hdGNoZXMgdHJhbnNhY3Rpb24gYXR0cmlidXRlCiAgICBpZihpdCAhPSBhdHRyaWJ1dGUuZW5kKCkgJiYgKml0ID09IGNyaXRlcmlhKSB7CiAgICAJY291dCA8PCBjcml0ZXJpYSA8PCAiIGlzIGEgZHVwbGljYXRlXG4iOwogICAgfQogICAgYXR0cmlidXRlLmluc2VydChpdCwgY3JpdGVyaWEpOwogICAgcmV0dXJuIHJlc3VsdDsKfQoKaW50IG1haW4oKSB7CglUcmFuc2FjdGlvbkxpc3QgcmVzdWx0OwoJc2l6ZV90IHNpemU7Cglkb3VibGUgbnVtOwoJc3RyaW5nIGk7CgkKCXdoaWxlKGNpbiA+PiBpKSB7CgkJaWYoc3NjYW5mKGkuY19zdHIoKSwgIiVsZiVuIiwgJm51bSwgJnNpemUpID09IDEgJiYgc2l6ZSA9PSBpLnNpemUoKSkgewoJCSAgICByZXN1bHQgPSBnZXRUcmFuc2FjdGlvbnNGb3JTZWFyY2hDcml0ZXJpYShyZXN1bHQsIG51bSk7CgkJfSBlbHNlIHsKCQkgICAgcmVzdWx0ID0gZ2V0VHJhbnNhY3Rpb25zRm9yU2VhcmNoQ3JpdGVyaWEocmVzdWx0LCBpKTsKCQl9Cgl9CgkKCWNvdXQgPDwgIlN0cmluZ3M6XG5cdCI7Cgljb3B5KHJlc3VsdC5maXJzdC5jYmVnaW4oKSwgcmVzdWx0LmZpcnN0LmNlbmQoKSwgb3N0cmVhbV9pdGVyYXRvcjxzdHJpbmc+KGNvdXQsICIgIikpOwoJY291dCA8PCAiXG5Eb3VibGVzOlxuXHQiOwoJY29weShyZXN1bHQuc2Vjb25kLmNiZWdpbigpLCByZXN1bHQuc2Vjb25kLmNlbmQoKSwgb3N0cmVhbV9pdGVyYXRvcjxkb3VibGU+KGNvdXQsICIgIikpOwp9