#include <bits/stdc++.h>
using namespace std;
int main() {
  long long n, m, i, j;
  string s;
  cin >> s;
  n = s.size();
  string cur;
  if (s.size() <= 6) {
    cout << 0;
    return 0;
  }
  for (i = 5; i < s.size(); i++) {
    cur += s[i];
  }
  if (cur.size() == 2) {
    cout << 1 << endl << cur;
    return 0;
  }
  reverse(cur.begin(), cur.end());
  string inf = "---";
  vector<string> dp2(10500), dp3(10500);
  vector<string> ans;
  dp2[0] = inf;
  dp2[1] += cur[0];
  dp2[1] += cur[1];
  dp3[0] = inf;
  dp3[1] = inf;
  dp3[2] += cur[0];
  dp3[2] += cur[1];
  dp3[2] += cur[2];
  dp2[2] = inf;
  ans.push_back(dp2[1]);
  ans.push_back(dp3[2]);
  for (i = 3; i < cur.size(); i++) {
    bool two = true;
    if (dp2[i - 2] == inf && dp3[i - 2] == inf) {
      dp2[i] = inf;
      two = false;
    }
    {
      if (dp2[i - 2] != inf) {
        string ss;
        ss += cur[i - 1];
        ss += cur[i];
        if (ss != dp2[i - 2]) {
          dp2[i] = ss;
          ans.push_back(ss);
        } else
          two = false;
      }
      {
        if (dp3[i - 2] != inf) {
          two = true;
          string ss;
          ss += cur[i - 1];
          ss += cur[i];
          dp2[i] = ss;
          ans.push_back(ss);
        }
      }
    }
    if (!two) dp2[i] = inf;
    bool three = true;
    if (dp3[i - 3] == inf && dp2[i - 3] == inf) {
      dp3[i] = inf;
      three = false;
    }
    {
      if (dp3[i - 3] != inf) {
        string ss;
        ss += cur[i - 2];
        ss += cur[i - 1];
        ss += cur[i];
        if (ss != dp3[i - 3]) {
          dp3[i] = ss;
          ans.push_back(ss);
        } else
          three = false;
      }
      {
        if (dp2[i - 3] != inf) {
          string ss;
          ss += cur[i - 2];
          ss += cur[i - 1];
          ss += cur[i];
          ans.push_back(ss);
          dp3[i] = ss;
          three = true;
        }
      }
    }
    if (!three) dp3[i] = inf;
  }
  for (i = 0; i < ans.size(); i++) {
    reverse(ans[i].begin(), ans[i].end());
  }
  sort(ans.begin(), ans.end());
  set<string> h;
  set<string>::iterator ii;
  for (i = 0; i < ans.size(); i++) h.insert(ans[i]);
  cout << h.size() << endl;
  for (ii = h.begin(); ii != h.end(); ii++) cout << *ii << endl;
  return 0;
}
