#include <bits/stdc++.h>
using namespace std;
template <typename T>
void print(vector<T>& v) {
  for (int i = 0; i < v.size(); i++) {
    cout << v[i] << ' ';
  }
  cout << '\n';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  string s;
  cin >> s;
  int n = s.length();
  set<string> Set;
  if (n <= 5) {
    cout << 0 << '\n';
    return 0;
  }
  vector<bool> dp2(n - 4);
  vector<bool> dp3(n - 4);
  dp2[0] = true;
  dp3[0] = true;
  for (int i = 2; i < n - 4; i++) {
    if (dp3[i - 2] || (dp2[i - 2] && !(s[n - 1 - i + 1] == s[n - 1 - i + 3] &&
                                       s[n - 1 - i + 2] == s[n - 1 - i + 4]))) {
      dp2[i] = true;
    }
    if (i > 2 && (dp2[i - 3] ||
                  (dp3[i - 3] && !(s[n - 1 - i + 1] == s[n - 1 - i + 4] &&
                                   s[n - 1 - i + 2] == s[n - 1 - i + 5] &&
                                   s[n - 1 - i + 3] == s[n - 1 - i + 6])))) {
      dp3[i] = true;
    }
  }
  for (int i = 1; i < n - 4; i++) {
    if (dp2[i]) {
      Set.insert(s.substr(n - i, 2));
    }
    if (dp3[i]) {
      Set.insert(s.substr(n - i, 3));
    }
  }
  cout << Set.size() << '\n';
  for (auto i : Set) {
    cout << i << '\n';
  }
}
