#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + 10;
string s;
set<string> ans;
int dp[4][maxn];
int main() {
  cin >> s;
  ans.clear();
  int len = s.length();
  if (len >= 7) ans.insert(s.substr(len - 2, 2));
  if (len >= 8) ans.insert(s.substr(len - 3, 3));
  reverse(s.begin(), s.end());
  memset(dp, 0, sizeof dp);
  dp[2][1] = 1;
  dp[3][2] = 1;
  for (int i = 3; i < len - 5; i++) {
    dp[2][i] = dp[3][i - 2] |
               (dp[2][i - 2] && (s.substr(i - 3, 2) != s.substr(i - 1, 2)));
    dp[3][i] = dp[2][i - 3] |
               (dp[3][i - 3] && (s.substr(i - 5, 3) != s.substr(i - 2, 3)));
    if (dp[2][i]) {
      string tmp = s.substr(i - 1, 2);
      reverse(tmp.begin(), tmp.end());
      ans.insert(tmp);
    }
    if (dp[3][i]) {
      string tmp = s.substr(i - 2, 3);
      reverse(tmp.begin(), tmp.end());
      ans.insert(tmp);
    }
  }
  cout << (int)ans.size() << endl;
  for (set<string>::iterator it = ans.begin(); it != ans.end(); it++) {
    cout << *it << endl;
  }
}
