#include <bits/stdc++.h>
using namespace std;
string s;
set<string> tmp;
bool dp[10010][5];
void go(int i, int prv) {
  if (dp[i][prv]) return;
  dp[i][prv] = 1;
  if (s.substr(i, 2) != s.substr(i - prv, prv) && i + 6 < s.size()) {
    string t = s.substr(i, 2);
    reverse(t.begin(), t.end());
    tmp.insert(t);
    go(i + 2, 2);
  }
  if (s.substr(i, 3) != s.substr(i - prv, prv) && i + 7 < s.size()) {
    string t = s.substr(i, 3);
    reverse(t.begin(), t.end());
    tmp.insert(t);
    go(i + 3, 3);
  }
}
int main() {
  while (cin >> s) {
    reverse(s.begin(), s.end());
    memset(dp, 0, sizeof dp);
    tmp.clear();
    go(0, 0);
    cout << tmp.size() << endl;
    for (set<string>::iterator it = tmp.begin(); it != tmp.end(); it++) {
      cout << *it << endl;
    }
  }
  return 0;
}
