#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MaxN = 1e4;
bool can[MaxN + 1][4];
int main(int argc, const char * argv[]) {
string s;
cin >> s;
int n = (int)s.length();
can[n][2] = true;
can[n][3] = true;
for (int i = n - 1; i >= 5; --i) {
for (int j = 2; j <= 3; ++j) {
if (i + j > n) continue;
string nxt = "";
if (i + j != n)
nxt = s.substr(i + j, j);
if (can[i + j][5 - j] || (can[i + j][j] && nxt != s.substr(i, j))) {
can[i][j] = true;
}
}
}
vector<string> ans;
for (int i = 5; i < n; ++i)
for (int j = 2; j <= 3; ++j) {
if (i + j <= n && can[i][j]) {
ans.push_back(s.substr(i, j));
}
}
sort(ans.begin(), ans.end());
ans.resize(unique(ans.begin(), ans.end()) - ans.begin());
cout << ans.size() << endl;
for (int i = 0; i < (int)ans.size(); ++i) {
cout << ans[i] << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKCmNvbnN0IGludCBNYXhOID0gMWU0OwoKYm9vbCBjYW5bTWF4TiArIDFdWzRdOwoKaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBhcmd2W10pIHsKICAgIHN0cmluZyBzOwogICAgY2luID4+IHM7CiAgICBpbnQgbiA9IChpbnQpcy5sZW5ndGgoKTsKICAgIGNhbltuXVsyXSA9IHRydWU7CiAgICBjYW5bbl1bM10gPSB0cnVlOwogICAgZm9yIChpbnQgaSA9IG4gLSAxOyBpID49IDU7IC0taSkgewogICAgICAgIGZvciAoaW50IGogPSAyOyBqIDw9IDM7ICsraikgewogICAgICAgICAgICBpZiAoaSArIGogPiBuKSBjb250aW51ZTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHN0cmluZyBueHQgPSAiIjsKICAgICAgICAgICAgaWYgKGkgKyBqICE9IG4pIAogICAgICAgICAgICAgICAgbnh0ID0gcy5zdWJzdHIoaSArIGosIGopOwogICAgICAgICAgICBpZiAoY2FuW2kgKyBqXVs1IC0gal0gfHwgKGNhbltpICsgal1bal0gJiYgbnh0ICE9IHMuc3Vic3RyKGksIGopKSkgewogICAgICAgICAgICAgICAgY2FuW2ldW2pdID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgdmVjdG9yPHN0cmluZz4gYW5zOwogICAgCiAgICBmb3IgKGludCBpID0gNTsgaSA8IG47ICsraSkKICAgICAgICBmb3IgKGludCBqID0gMjsgaiA8PSAzOyArK2opIHsKICAgICAgICAgICAgaWYgKGkgKyBqIDw9IG4gJiYgY2FuW2ldW2pdKSB7CiAgICAgICAgICAgICAgICBhbnMucHVzaF9iYWNrKHMuc3Vic3RyKGksIGopKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIAogICAgc29ydChhbnMuYmVnaW4oKSwgYW5zLmVuZCgpKTsKICAgIGFucy5yZXNpemUodW5pcXVlKGFucy5iZWdpbigpLCBhbnMuZW5kKCkpIC0gYW5zLmJlZ2luKCkpOwogICAgY291dCA8PCBhbnMuc2l6ZSgpIDw8IGVuZGw7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpYW5zLnNpemUoKTsgKytpKSB7CiAgICAgICAgY291dCA8PCBhbnNbaV0gPDwgZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9