#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main() {
// your code goes here
vector<vector<string>> res;
unordered_map<string, int> mp;
vector<string> arr= {
"1$0$1$0$0$0$0$0$0$0$0$0$0$0$0$0$0$0$0$1$0$0$0$0$0$0$",
" 0$0$0$1$0$0$1$0$0$0$0$0$0$0$1$0$0$0$0$0$0$0$0$0$0$0$",
" 1$0$1$0$0$0$0$0$0$0$0$0$0$0$0$0$0$0$0$1$0$0$0$0$0$0$",
" 0$0$0$1$0$0$1$0$0$0$0$0$0$0$1$0$0$0$0$0$0$0$0$0$0$0$",
" 1$0$1$0$0$0$0$0$0$0$0$0$0$0$0$0$0$0$0$1$0$0$0$0$0$0$"
};
for (int i = 0; i < arr.size(); i++) {
string key = arr[i];
// If key is not present in the hash map, add
// an empty group (vector) in the result and
// store the index of the group in hash map
if (mp.find(key) == mp.end()) {
mp[key] = res.size();
res.push_back({});
}
// Insert the string in its correct group
res[mp[key]].push_back(arr[i]);
//cout<<res;
}
for(int i = 0; i < res.size(); i++) {
for(int j = 0; j < res[i].size(); j++)
cout << res[i][j] << " ";
// cout<<res[i][0];
cout << "\n";
}
//cout<<res;
//return res;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCgkKCQoJdmVjdG9yPHZlY3RvcjxzdHJpbmc+PiByZXM7CiAgICB1bm9yZGVyZWRfbWFwPHN0cmluZywgaW50PiBtcDsKICAgIAogICAgdmVjdG9yPHN0cmluZz4gYXJyPSB7CiAgICAJIjEkMCQxJDAkMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkMSQwJDAkMCQwJDAkMCQiLAogICAgIiAwJDAkMCQxJDAkMCQxJDAkMCQwJDAkMCQwJDAkMSQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkIiwgCiAgICAiIDEkMCQxJDAkMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkMSQwJDAkMCQwJDAkMCQiLAogICAgIiAwJDAkMCQxJDAkMCQxJDAkMCQwJDAkMCQwJDAkMSQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkIiwKICAgICIgMSQwJDEkMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkMCQxJDAkMCQwJDAkMCQwJCIKICAgIH07CiAgICAKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnIuc2l6ZSgpOyBpKyspIHsKICAgICAgICBzdHJpbmcga2V5ID0gYXJyW2ldOwogICAgICAKICAgICAgICAvLyBJZiBrZXkgaXMgbm90IHByZXNlbnQgaW4gdGhlIGhhc2ggbWFwLCBhZGQKICAgICAgICAvLyBhbiBlbXB0eSBncm91cCAodmVjdG9yKSBpbiB0aGUgcmVzdWx0IGFuZAogICAgICAgIC8vIHN0b3JlIHRoZSBpbmRleCBvZiB0aGUgZ3JvdXAgaW4gaGFzaCBtYXAKICAgICAgICBpZiAobXAuZmluZChrZXkpID09IG1wLmVuZCgpKSB7CiAgICAgICAgICAgIG1wW2tleV0gPSByZXMuc2l6ZSgpOwogICAgICAgICAgICByZXMucHVzaF9iYWNrKHt9KTsKICAgICAgICB9CiAgICAgIAogICAgICAgIC8vIEluc2VydCB0aGUgc3RyaW5nIGluIGl0cyBjb3JyZWN0IGdyb3VwCiAgICAgICAgcmVzW21wW2tleV1dLnB1c2hfYmFjayhhcnJbaV0pOwogICAgICAgIAogICAgICAgIAogICAgICAgICAvL2NvdXQ8PHJlczsKICAgIH0KICAgIAogICAgZm9yKGludCBpID0gMDsgaSA8IHJlcy5zaXplKCk7IGkrKykgewogICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCByZXNbaV0uc2l6ZSgpOyBqKyspCiAgICAgICAgICAgIGNvdXQgPDwgcmVzW2ldW2pdIDw8ICIgIjsKICAgICAgICAKICAgICAgLy8gIGNvdXQ8PHJlc1tpXVswXTsKICAgICAgICBjb3V0IDw8ICJcbiI7CiAgICB9CiAgICAKICAgIC8vY291dDw8cmVzOwogICAgLy9yZXR1cm4gcmVzOwoJcmV0dXJuIDA7Cn0=