#include <bits/stdc++.h>
using namespace std;
string s;
int dp[int(1e4) + 2][4];
int n;
set<string> ans;
vector<string> v;
int solve(int i, int j) {
  if (i == n) {
    return 1;
  }
  if (n - i < 2) {
    return 0;
  }
  int &x = dp[i][j];
  if (x == -1) {
    x = 0;
    string y = "";
    for (int k = i - j; k < i; k++) y += s[k];
    if (n - i >= 2) {
      string aux = "";
      for (int k = i; k < i + 2 && k < n; k++) {
        aux += s[k];
      }
      if (aux != y) {
        int a = solve(i + 2, 2);
        if (a) {
          ans.insert(aux);
          x += a;
        }
      }
    }
    if (n - i >= 3) {
      string aux = "";
      for (int k = i; k < i + 3 && k < n; k++) {
        aux += s[k];
      }
      if (aux != y) {
        int a = solve(i + 3, 3);
        if (a) {
          ans.insert(aux);
          x += a;
        }
      }
    }
  }
  return x;
}
int main() {
  cin >> s;
  memset(dp, -1, sizeof dp);
  n = s.size();
  for (int i = 5; i < n; i++) {
    if (dp[i][0] == -1) solve(i, 0);
  }
  cout << int(ans.size()) << endl;
  for (set<string>::iterator i = ans.begin(); i != ans.end(); i++) {
    cout << (*i) << endl;
  }
  return 0;
}
