#include <bits/stdc++.h>   using namespace std;   const int N = 2e4 + 5;   char s[N];   int dp[10][N];   int ans[N];   int len;   int dfs(int num, int idx) {     if (~dp[num][idx]) return dp[num][idx];     if (idx == len)       return 1;     else if (idx > len)       return 0;     int &ret = dp[num][idx];     ret = dfs(num ^ 1, idx + num);     bool flag = false;     for (int i = idx; i < idx + num; ++i) {       if (s[i] != s[i + num]) {         flag = true;         break;       }     }     if (flag) {       ret = max(ret, dfs(num, idx + num));     }     return ret;   }   const int B = 333;   int cal(char a, char b, char c) { return a * B * B + b * B + c; }   int cal(char a, char b) { return a * B * B + b * B; }   void prt(int x) {     printf( %c , x / (B * B));     printf( %c , x % (B * B) / B);     if (x % B) {       printf( %c , x % B);     }     puts(  );   }   int main() {     while (~scanf( %s , s)) {       memset(dp, -1, sizeof(dp));       int cnt = 0;       len = strlen(s);       for (int i = len - 2; i >= 5; --i) {         if (dfs(2, i) == 1) {           ans[cnt++] = (cal(s[i], s[i + 1]));         }         if (dfs(3, i) == 1) {           ans[cnt++] = (cal(s[i], s[i + 1], s[i + 2]));         }       }       sort(ans, ans + cnt);       cnt = unique(ans, ans + cnt) - ans;       printf( %d n , cnt);       for (int i = 0; i < cnt; ++i) {         prt(ans[i]);       }     }     return 0;   }   