Pagini recente » Cod sursa (job #1636995) | Cod sursa (job #760171) | Cod sursa (job #2051435) | Cod sursa (job #951109) | Cod sursa (job #2272504)
#include <cstdio>
#include <cstring>
#include <cassert>
using namespace std;
const int NMAX = 20005;
char s[NMAX][30];
char a[NMAX][30];
int lastp[NMAX];
int lastc[NMAX];
char ss[NMAX];
int dp[30];
int main() {
int n = 1;
freopen("text3.in", "r", stdin);
freopen("text3.out", "w", stdout);
scanf("%s", s[1]);
while(s[n][0] != 0) {
scanf("%s", s[++n]);
}
n--;
printf("%d\n", n);
int maxim = 0, poz = 0;
for(int i = 1; i <= n; i++) {
int l = (int)strlen(s[i]);
int c1 = s[i][0] - 'a';
int c2 = s[i][l - 1] - 'a';
if(dp[c1] + 1 > dp[c2]) {
dp[c2] = dp[c1] + 1;
lastp[i] = lastc[c1];
lastc[c2] = i;
if(maxim < dp[c2]) {
maxim = dp[c2];
poz = i;
}
}
}
int m = 0;
while(poz) {
strcpy(a[++m], s[poz]);
poz = lastp[poz];
}
assert(maxim <= n);
printf("%d\n", n - maxim);
for(int i = m; i > 0; i--) {
printf("%s\n", a[i]);
}
return 0;
}