#include <bits/stdc++.h>   using namespace std;   int n, m, x, y, z, k, w;   char S[10005];   int dp[10005];   int ok[20005];   bool check(int x, int y, int pos) {     for (int i = (0); i < (pos); i++)       if (S[i + x] != S[i + y]) return 1;     return 0;   }   struct node {     char S[4];   } ANS[20005];   bool cmp(const node& a, const node& b) { return strcmp(a.S, b.S) < 0; }   int main() {     scanf( %s , S);     n = strlen(S);     dp[n - 2] = 2;     dp[n] = -1;     dp[n - 3] = 1;     for (int i = (n - 4); i >= (5); i--) {       if (dp[i + 3] == 1 && check(i, i + 3, 3))         dp[i] += 1;       else if (dp[i + 3] == 2 || dp[i + 3] == 3)         dp[i] += 1;       if (dp[i + 2] == 2 && check(i, i + 2, 2))         dp[i] += 2;       else if (dp[i + 2] == 1 || dp[i + 2] == 3)         dp[i] += 2;     }     for (int i = (5); i < (n); i++) {       if (dp[i] >= 2) {         dp[i] -= 2;         ANS[w].S[0] = S[i];         ANS[w].S[1] = S[i + 1];         w++;       }       if (dp[i] >= 1) {         ANS[w].S[0] = S[i];         ANS[w].S[1] = S[i + 1];         ANS[w].S[2] = S[i + 2];         w++;       }     }     sort(ANS, ANS + w, cmp);     for (int i = (1); i < (w); i++)       if (strcmp(ANS[i].S, ANS[i - 1].S) == 0) ok[i] = 1;     x = 0;     for (int i = (0); i < (w); i++)       if (ok[i] == 0) x++;     printf( %d n , x);     for (int i = (0); i < (w); i++)       if (ok[i] == 0) printf( %s n , ANS[i].S);     return 0;   }   