# 13692 - Aftermath's Ideology
>author: Utin
###### tags: `string`
---
## Brief
需建表並加入參數q以免TLE
String Operation目前已知共有4種變化
13572 String Operations 1
13573 String Operations 2
13692 Aftermath’s Ideology
13805 Professor Bear’s Challenge
## Solution 0
```c=
#include <stdio.h>
#include <string.h>
int q;
char arr[1000001]; // input
char table[100001][26]; // alphabet table
int op[100001][3]; // operation queue
int main() {
scanf("%s", arr);
scanf("%d", &q);
int len = strlen(arr);
for (int j = 0; j < 26; j++) table[q][j] = 'a' + j;
// input
for (int i = 0; i < q; i++) {
scanf("%d", &op[i][0]);
if (op[i][0] == 1) {
char temp1, temp2;
scanf(" %c %c", &temp1, &temp2);
op[i][1] = temp1;
op[i][2] = temp2;
}
else if (op[i][0] == 2) {
char temp;
scanf("%d %c", &op[i][1], &temp);
op[i][2] = temp;
}
else scanf("%d %d", &op[i][1], &op[i][2]);
}
for (int i = q-1; i >= 0; i--) {
// update
for (int j = 0; j < 26; j++) {
table[i][j] = table[i+1][j];
}
// operation type 1
if (op[i][0] == 1) {
table[i][op[i][1]-'a'] = table[i+1][op[i][2]-'a'];
}
}
for (int i = 0; i < q; i++) {
// operation type 2
if (op[i][0] == 2) {
arr[op[i][1]] = table[i][op[i][2]-'a'] - 32;
}
// operation type 3
else if (op[i][0] == 3) {
char temp = arr[op[i][1]];
arr[op[i][1]] = arr[op[i][2]];
arr[op[i][2]] = temp;
}
}
// output
for (int i = 0; i < len; i++) {
if (arr[i] >= 'a') printf("%c", table[0][arr[i]-'a']);
else printf("%c", arr[i] + 32);
}
printf("\n");
}
// By Utin
```
## Reference