#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
int n, m;
cin >> n >> m;
map<string, int> k;
set<string> a;
vector<string> g;
string s;
while (n--)
{
cin >> s;
k[s]++;
a.insert(s);
g.push_back(s);
}
ll mx = 0;
string j, r;
for (auto x : k)
{
r = x.first;
reverse(r.begin(), r.end());
if (x.second > mx && r == x.first)
{
mx = x.second;
j = x.first;
}
}
deque<string> dq;
while (mx--)
{
dq.push_back(j);
}
if (dq.size())
{
a.erase(j);
k[j] = 0;
}
for (auto x : g)
{
if (k[x] != 0)
{
r = x;
reverse(r.begin(), r.end());
if (a.find(r) != a.end())
{
if ((x == r && k[x] % 2 == 0))
{
dq.push_back(x);
dq.push_front(r);
}
else if (x != r)
{
dq.push_back(x);
dq.push_front(r);
}
k[x]--;
k[r]--;
}
if (k[x] == 0 || k[r] == 0)
{
a.erase(x);
a.erase(r);
}
}
}
ll si = 0;
for (auto x : dq)
{
si += x.size();
}
cout << si << endl;
for (auto x : dq)
{
cout << x;
}
}
1602A - Two Subsequences | 1555A - PizzaForces |
1607B - Odd Grasshopper | 1084A - The Fair Nut and Elevator |
1440B - Sum of Medians | 1032A - Kitchen Utensils |
1501B - Napoleon Cake | 1584B - Coloring Rectangles |
1562B - Scenes From a Memory | 1521A - Nastia and Nearly Good Numbers |
208. Implement Trie | 1605B - Reverse Sort |
1607C - Minimum Extraction | 1604B - XOR Specia-LIS-t |
1606B - Update Files | 1598B - Groups |
1602B - Divine Array | 1594B - Special Numbers |
1614A - Divan and a Store | 2085. Count Common Words With One Occurrence |
2089. Find Target Indices After Sorting Array | 2090. K Radius Subarray Averages |
2091. Removing Minimum and Maximum From Array | 6. Zigzag Conversion |
1612B - Special Permutation | 1481. Least Number of Unique Integers after K Removals |
1035. Uncrossed Lines | 328. Odd Even Linked List |
1219. Path with Maximum Gold | 1268. Search Suggestions System |