# 13804 - Make more sentences
>author: Utin
###### tags: `dynamic memory`
---
## Brief
See the code below
## Solution 0
```c=
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int N, M, length[101];
char* student[101];
int main() {
scanf("%d %d", &N, &M);
// student sentence
for (int n = 0; n < N; n++) {
char temp[10001];
scanf("%s", temp);
length[n] = strlen(temp);
student[n] = (char*) malloc(length[n] + 1);
memset(student[n], 0, length[n] + 1);
strcpy(student[n], temp);
}
// operation
while (M--) {
char op[15];
scanf("%s", op);
if (op[0] == 'r') {
int x;
scanf("%d", &x);
x--;
// make the new string
char* temp = (char*) malloc(length[x] + 1);
memset(temp, 0, length[x] + 1);
for (int i = 0; i < length[x]; i++) {
temp[i] = student[x][length[x] - i - 1];
}
// free the old string and point to the new one
free(student[x]);
student[x] = temp;
}
else if (op[0] == 'p') {
int x;
scanf("%d", &x);
x--;
printf("%s\n", student[x]);
}
else if (op[0] == 'a') {
int x, y;
scanf("%d %d", &x, &y);
x--;
y--;
// make the new string
char* temp = (char*) malloc(length[x] + length[y] + 1);
memset(temp, 0, length[x] + length[y] + 1);
if (length[y] < length[x]) {
strcpy(temp, student[y]);
strcat(temp, student[x]);
// free the old string and point to the new one
free(student[y]);
student[y] = temp;
// modify the length
length[y] += length[x];
}
else {
strcpy(temp, student[x]);
strcat(temp, student[y]);
// free the old string and point to the new one
free(student[x]);
student[x] = temp;
// modify the length
length[x] += length[y];
}
}
else if (op[0] == 'd') {
char s[10001];
int x, s_len;
scanf("%s %d", s, &x);
x--;
s_len = strlen(s);
char* flag = strstr(student[x], s);
if (flag != NULL) {
// make the new string
char* temp = malloc(length[x] - s_len + 1);
memset(temp, 0, length[x] - s_len + 1);
strncpy(temp, student[x], flag - student[x]);
strcat(temp, flag + s_len);
// free the old string and point to the new one
free(student[x]);
student[x] = temp;
// modify the length
length[x] -= s_len;
}
}
}
}
// By Utin
```
## Reference