#include <bits/stdc++.h>
using namespace std;
string s;
set<string> sfx;
bool vis[10004][3];
void dp(int i = (int)s.size(), int f = 0) {
  if (vis[i][f]) return;
  vis[i][f] = 1;
  string t2;
  if (f == 1 && i <= (int)s.size() - 2)
    t2 = s.substr(i, 2);
  else if (f == 2 && i <= (int)s.size() - 3)
    t2 = s.substr(i, 3);
  else
    t2 = "";
  if (i - 2 > 4) {
    string test(s.begin() + i - 2, s.begin() + i);
    if (test != t2) {
      sfx.insert(test);
      dp(i - 2, 1);
    }
  }
  if (i - 3 > 4) {
    string test(s.begin() + i - 3, s.begin() + i);
    if (test != t2) {
      sfx.insert(test);
      dp(i - 3, 2);
    }
  }
}
int main() {
  cin >> s;
  dp();
  cout << (int)sfx.size() << endl;
  for (auto A : sfx) cout << A << endl;
  return 0;
}
