#include <bits/stdc++.h>
using namespace std;
set<string> setao;
string s;
const int N = 10010;
int pd[N][4], n;
char solve(int k, int last) {
  if (k == n) return 1;
  if (n - k == 1 or k > n) return 0;
  if (pd[k][last] != -1) return pd[k][last];
  string ant;
  for (int i = last; i >= 1; i--) {
    ant.push_back(s[k - i]);
  }
  string x;
  for (int i = 0; i < 2; i++) x.push_back(s[k + i]);
  char flag = 0;
  if (x != ant) {
    if (solve(k + 2, 2)) {
      setao.insert(x);
      flag = 1;
    }
  }
  if (n - k > 2) {
    x.push_back(s[k + 2]);
    if (x != ant) {
      if (solve(k + 3, 3)) {
        setao.insert(x);
        flag = 1;
      }
    }
  }
  return pd[k][last] = flag;
}
int main(void) {
  memset(pd, -1, sizeof pd);
  cin >> s;
  n = s.size();
  for (int i = 5; i < n; i++) {
    solve(i, 0);
  }
  printf("%d\n", (int)setao.size());
  for (set<string>::iterator it = setao.begin(); it != setao.end(); it++) {
    cout << *it << endl;
  }
  return 0;
}
