#include <bits/stdc++.h>
using namespace std;
set<string> ans;
string s;
bool vis[10009][5];
void dfs(int i, int k) {
  if (vis[i][k]) return;
  vis[i][k] = 1;
  if (i >= 6) {
    ans.insert(s.substr(i - 1, 2));
  }
  if (i >= 7) {
    ans.insert(s.substr(i - 2, 3));
  }
  if (i >= 6) {
    if (k == 0 || s.substr(i + 1, k) != s.substr(i - 1, 2)) dfs(i - 2, 2);
  }
  if (i >= 7) {
    if (k == 0 || s.substr(i + 1, k) != s.substr(i - 2, 3)) dfs(i - 3, 3);
  }
}
int main() {
  cin >> s;
  dfs(s.size() - 1, 0);
  set<string>::iterator it;
  cout << ans.size() << endl;
  for (it = ans.begin(); it != ans.end(); it++) cout << *it << endl;
}
