#include <bits/stdc++.h>
using namespace std;
char s[1 << 20];
int dp[2][1 << 20];
int get(int l, int r) {
  int ans = 0;
  for (int i = l; i <= r; ++i) ans = ans * 26 + s[i] - 'a';
  return ans;
}
string g(int l, int r) {
  string ans = "";
  for (int i = l; i <= r; ++i) ans += s[i];
  return ans;
}
int main(void) {
  cin >> (s + 1);
  int n = strlen(s + 1);
  dp[0][n + 1] = dp[1][n + 1] = 1;
  set<string> str;
  for (int i = n; i > 5; --i) {
    if (i + 1 <= n) {
      dp[0][i] |= dp[1][i + 2];
      dp[0][i] |= dp[0][i + 2] && get(i, i + 1) != get(i + 2, i + 3);
      if (dp[0][i]) str.insert(g(i, i + 1));
    }
    if (i + 2 <= n) {
      dp[1][i] |= dp[0][i + 3];
      dp[1][i] |= dp[1][i + 3] && get(i, i + 2) != get(i + 3, i + 5);
      if (dp[1][i]) str.insert(g(i, i + 2));
    }
  }
  cout << (str.size()) << '\n';
  for (auto it : str) cout << it << '\n';
  return 0;
}
