#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e4;
const int STEM = 5;
bool ok2[MAXN], ok3[MAXN];
int main() {
  string s;
  cin >> s;
  set<string> ans;
  if (s.size() >= 7) {
    ok2[s.size() - 1] = true;
    ans.insert(s.substr(s.size() - 2, 2));
  }
  if (s.size() >= 8) {
    ok3[s.size() - 1] = true;
    ans.insert(s.substr(s.size() - 3, 3));
  }
  for (int i = s.size() - 3; i >= STEM + 1; i--) {
    bool first = (i == s.size() - 3);
    string s2l = s.substr(i - 1, 2), s2r = s.substr(i + 1, 2);
    if ((!first && ok3[i + 3]) || (ok2[i + 2] && s2l != s2r)) {
      ok2[i] = true;
      ans.insert(s2l);
    }
    if (i != STEM + 1) {
      string s3l = s.substr(i - 2, 3), s3r = s.substr(i + 1, 3);
      if (ok2[i + 2] || (!first && ok3[i + 3] && s3l != s3r)) {
        ok3[i] = true;
        ans.insert(s3l);
      }
    }
  }
  cout << ans.size() << endl;
  for (string s : ans) {
    cout << s << endl;
  }
  return 0;
}
