#include <bits/stdc++.h>
using namespace std;
int n;
string s;
set<string> a;
int dp[10010][2];
bool ok(int i, int x) {
  if (i + x > n) return 0;
  if (i + x == n) return 1;
  if (i + x == n - 1) return 0;
  if (dp[i][x - 2] != -1) return dp[i][x - 2];
  int &ref = dp[i][x - 2];
  if (ok(i + x, 5 - x))
    ref = 1;
  else if (i + x < n && s.substr(i, x) == s.substr(i + x, x))
    ref = 0;
  else
    ref = ok(i + x, x);
  return ref;
}
int main() {
  memset(dp, -1, sizeof(dp));
  cin >> s;
  n = s.size();
  for (int i = 5; i < n; i++) {
    if (i + 2 <= n && i + 2 != n - 1 && ok(i, 2)) {
      a.insert(s.substr(i, 2));
    }
    if (i + 3 <= n && i + 3 != n - 1 && ok(i, 3)) {
      a.insert(s.substr(i, 3));
    }
  }
  cout << a.size() << '\n';
  for (string t : a) {
    cout << t << '\n';
  }
}
