#include <bits/stdc++.h>
using namespace std;
string S;
set<string> SS;
int mem[4][10100];
int dp(int psz, int i) {
  if (i >= S.size()) return 1;
  if (mem[psz][i] != -1) return mem[psz][i];
  string p = S.substr(i - psz, psz);
  int w = 0;
  for (int j = 2; j <= 3; ++j) {
    if (i + j <= S.size()) {
      string n = S.substr(i, j);
      if (n != p) {
        if (dp(j, i + j)) {
          w = 1;
          SS.insert(n);
        }
      }
    }
  }
  return mem[psz][i] = w;
}
int main() {
  memset(mem, -1, sizeof(mem));
  cin >> S;
  for (int i = 5; i < S.size(); ++i) {
    dp(0, i);
  }
  cout << SS.size() << endl;
  vector<string> V(SS.begin(), SS.end());
  for (int i = 0; i < V.size(); ++i) {
    cout << V[i] << endl;
  }
}
