#include <bits/stdc++.h>
using namespace std;
set<string> st;
set<string>::iterator it1;
vector<int> dp2(20000, 0), dp3(20000, 0);
void solve(string s, int i, string prev) {
  if (i < 1) return;
  if (i == 1) {
    string a = s.substr(i - 1, 2);
    if (a != prev)
      st.insert(a);
    else
      return;
  } else {
    string temp;
    string a = s.substr(i - 1, 2);
    string b = s.substr(i - 2, 3);
    if (a != prev && !dp2[i]) {
      dp2[i] = 1;
      temp = a;
      solve(s, i - 2, temp);
    }
    if (b != prev && !dp3[i]) {
      dp3[i] = 1;
      temp = b;
      solve(s, i - 3, temp);
    }
  }
  return;
}
int main() {
  string str;
  cin >> str;
  if (str.size() < 7) {
    cout << 0;
    return 0;
  }
  string s(str.begin() + 5, str.end());
  int n = s.size();
  solve(s, n - 1, "");
  for (int i = 0; i < n; i++) {
    if (dp2[i]) st.insert(s.substr(i - 1, 2));
    if (dp3[i]) st.insert(s.substr(i - 2, 3));
  }
  cout << st.size() << endl;
  it1 = st.begin();
  for (; it1 != st.end(); it1++) cout << *it1 << endl;
  return 0;
}
