#include <bits/stdc++.h>
const int maxn = 1e5 + 7;
using namespace std;
set<string> ss;
set<string>::iterator it;
string str;
bool dp[maxn][2];
int main() {
  while (cin >> str) {
    ss.clear();
    memset(dp, 0, sizeof(0));
    int len = str.size();
    for (int i = len - 1; i >= 5; i--) {
      if (i + 2 == len) {
        dp[i][0] = true;
        ss.insert(str.substr(i, 2));
        continue;
      }
      if (i + 3 == len) {
        dp[i][1] = true;
        ss.insert(str.substr(i, 3));
        continue;
      }
      if (dp[i + 2][1] ||
          (dp[i + 2][0] && str.substr(i, 2) != str.substr(i + 2, 2))) {
        dp[i][0] = true;
        ss.insert(str.substr(i, 2));
      }
      if (dp[i + 3][0] ||
          (dp[i + 3][1] && str.substr(i, 3) != str.substr(i + 3, 3))) {
        dp[i][1] = true;
        ss.insert(str.substr(i, 3));
      }
    }
    cout << ss.size() << endl;
    for (it = ss.begin(); it != ss.end(); it++) {
      cout << *it << endl;
    }
  }
  return 0;
}
