#include <bits/stdc++.h>
using namespace std;
#define NAME_MAXLEN 6
#define PATH_MAXLEN 1999
#define pb push_back
map<string, vector<string>> dir;
void init(int n) {
dir.clear();
}
void cmd_mkdir(char path[PATH_MAXLEN + 1], char name[NAME_MAXLEN + 1]) {
dir[path].pb(strcat(path, strcat(name, "/")));
}
void dfs(string s){
for (auto &a : dir[s]){
dfs(a);
a.clear();
}
}
void cmd_rm(char path[PATH_MAXLEN + 1]) {
dfs(path);
}
void cmd_cp(char srcPath[PATH_MAXLEN + 1], char dstPath[PATH_MAXLEN + 1]) {
}
void cmd_mv(char srcPath[PATH_MAXLEN + 1], char dstPath[PATH_MAXLEN + 1]) {
}
int cmd_find(char path[PATH_MAXLEN + 1]) {
return 0;
}
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#include<stdio.h>
#define CMD_MKDIR 1
#define CMD_RM 2
#define CMD_CP 3
#define CMD_MV 4
#define CMD_FIND 5
#define NAME_MAXLEN 6
#define PATH_MAXLEN 1999
extern void init(int n);
extern void cmd_mkdir(char path[PATH_MAXLEN + 1], char name[NAME_MAXLEN + 1]);
extern void cmd_rm(char path[PATH_MAXLEN + 1]);
extern void cmd_cp(char srcPath[PATH_MAXLEN + 1], char dstPath[PATH_MAXLEN + 1]);
extern void cmd_mv(char srcPath[PATH_MAXLEN + 1], char dstPath[PATH_MAXLEN + 1]);
extern int cmd_find(char path[PATH_MAXLEN + 1]);
static bool run(int m) {
bool isAccepted = true;
int cmd;
char name[NAME_MAXLEN + 1];
char path1[PATH_MAXLEN + 1], path2[PATH_MAXLEN + 1];
while (m--) {
scanf("%d", &cmd);
if (cmd == CMD_MKDIR) {
scanf("%s%s", path1, name);
cmd_mkdir(path1, name);
}
else if (cmd == CMD_RM) {
scanf("%s", path1);
cmd_rm(path1);
}
else if (cmd == CMD_CP) {
scanf("%s%s", path1, path2);
cmd_cp(path1, path2);
}
else if (cmd == CMD_MV) {
scanf("%s%s", path1, path2);
cmd_mv(path1, path2);
}
else {
int ret;
int answer;
scanf("%s", path1);
ret = cmd_find(path1);
scanf("%d", &answer);
isAccepted &= (ret == answer);
}
}
return isAccepted;
}
int main(void) {
int test, T;
int n, m;
// freopen("sample_input.txt", "r", stdin);
setbuf(stdout, NULL);
scanf("%d", &T);
for (test = 1; test <= T; ++test) {
scanf("%d%d", &n, &m);
init(n);
if (run(m)) {
printf("#%d 100\n", test);
}
else {
printf("#%d 0\n", test);
}
// debug
for (auto a : dir["/aa/"]){
cout << a << ' ';
} cout << '\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIE5BTUVfTUFYTEVOIDYKI2RlZmluZSBQQVRIX01BWExFTiAxOTk5CiNkZWZpbmUgcGIgcHVzaF9iYWNrCgptYXA8c3RyaW5nLCB2ZWN0b3I8c3RyaW5nPj4gZGlyOwoKdm9pZCBpbml0KGludCBuKSB7CiAgICBkaXIuY2xlYXIoKTsKfQoKdm9pZCBjbWRfbWtkaXIoY2hhciBwYXRoW1BBVEhfTUFYTEVOICsgMV0sIGNoYXIgbmFtZVtOQU1FX01BWExFTiArIDFdKSB7CiAgICBkaXJbcGF0aF0ucGIoc3RyY2F0KHBhdGgsIHN0cmNhdChuYW1lLCAiLyIpKSk7Cn0KCnZvaWQgZGZzKHN0cmluZyBzKXsKICAgIGZvciAoYXV0byAmYSA6IGRpcltzXSl7CiAgICAgICAgZGZzKGEpOwogICAgICAgIGEuY2xlYXIoKTsKICAgIH0KfQoKdm9pZCBjbWRfcm0oY2hhciBwYXRoW1BBVEhfTUFYTEVOICsgMV0pIHsKICAgIGRmcyhwYXRoKTsKfQoKdm9pZCBjbWRfY3AoY2hhciBzcmNQYXRoW1BBVEhfTUFYTEVOICsgMV0sIGNoYXIgZHN0UGF0aFtQQVRIX01BWExFTiArIDFdKSB7Cgp9Cgp2b2lkIGNtZF9tdihjaGFyIHNyY1BhdGhbUEFUSF9NQVhMRU4gKyAxXSwgY2hhciBkc3RQYXRoW1BBVEhfTUFYTEVOICsgMV0pIHsKCn0KCmludCBjbWRfZmluZChjaGFyIHBhdGhbUEFUSF9NQVhMRU4gKyAxXSkgewoKCXJldHVybiAwOwp9CgojaWZuZGVmIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIAojZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIAojZW5kaWYKCiNpbmNsdWRlPHN0ZGlvLmg+CgojZGVmaW5lIENNRF9NS0RJUiAxCiNkZWZpbmUgQ01EX1JNIDIKI2RlZmluZSBDTURfQ1AgMwojZGVmaW5lIENNRF9NViA0CiNkZWZpbmUgQ01EX0ZJTkQgNQoKI2RlZmluZSBOQU1FX01BWExFTiA2CiNkZWZpbmUgUEFUSF9NQVhMRU4gMTk5OQoKZXh0ZXJuIHZvaWQgaW5pdChpbnQgbik7CmV4dGVybiB2b2lkIGNtZF9ta2RpcihjaGFyIHBhdGhbUEFUSF9NQVhMRU4gKyAxXSwgY2hhciBuYW1lW05BTUVfTUFYTEVOICsgMV0pOwpleHRlcm4gdm9pZCBjbWRfcm0oY2hhciBwYXRoW1BBVEhfTUFYTEVOICsgMV0pOwpleHRlcm4gdm9pZCBjbWRfY3AoY2hhciBzcmNQYXRoW1BBVEhfTUFYTEVOICsgMV0sIGNoYXIgZHN0UGF0aFtQQVRIX01BWExFTiArIDFdKTsKZXh0ZXJuIHZvaWQgY21kX212KGNoYXIgc3JjUGF0aFtQQVRIX01BWExFTiArIDFdLCBjaGFyIGRzdFBhdGhbUEFUSF9NQVhMRU4gKyAxXSk7CmV4dGVybiBpbnQgY21kX2ZpbmQoY2hhciBwYXRoW1BBVEhfTUFYTEVOICsgMV0pOwoKc3RhdGljIGJvb2wgcnVuKGludCBtKSB7CgoJYm9vbCBpc0FjY2VwdGVkID0gdHJ1ZTsKCWludCBjbWQ7CgljaGFyIG5hbWVbTkFNRV9NQVhMRU4gKyAxXTsKCWNoYXIgcGF0aDFbUEFUSF9NQVhMRU4gKyAxXSwgcGF0aDJbUEFUSF9NQVhMRU4gKyAxXTsKCgl3aGlsZSAobS0tKSB7CgoJCXNjYW5mKCIlZCIsICZjbWQpOwoKCQlpZiAoY21kID09IENNRF9NS0RJUikgewoJCQlzY2FuZigiJXMlcyIsIHBhdGgxLCBuYW1lKTsKCQkJY21kX21rZGlyKHBhdGgxLCBuYW1lKTsKCQl9CgkJZWxzZSBpZiAoY21kID09IENNRF9STSkgewoJCQlzY2FuZigiJXMiLCBwYXRoMSk7CgkJCWNtZF9ybShwYXRoMSk7CgkJfQoJCWVsc2UgaWYgKGNtZCA9PSBDTURfQ1ApIHsKCQkJc2NhbmYoIiVzJXMiLCBwYXRoMSwgcGF0aDIpOwoJCQljbWRfY3AocGF0aDEsIHBhdGgyKTsKCQl9CgkJZWxzZSBpZiAoY21kID09IENNRF9NVikgewoJCQlzY2FuZigiJXMlcyIsIHBhdGgxLCBwYXRoMik7CgkJCWNtZF9tdihwYXRoMSwgcGF0aDIpOwoJCX0KCQllbHNlIHsKCQkJaW50IHJldDsKCQkJaW50IGFuc3dlcjsKCgkJCXNjYW5mKCIlcyIsIHBhdGgxKTsKCQkJcmV0ID0gY21kX2ZpbmQocGF0aDEpOwoJCQlzY2FuZigiJWQiLCAmYW5zd2VyKTsKCgkJCWlzQWNjZXB0ZWQgJj0gKHJldCA9PSBhbnN3ZXIpOwoJCX0KCX0KCglyZXR1cm4gaXNBY2NlcHRlZDsKfQoKaW50IG1haW4odm9pZCkgewoKCWludCB0ZXN0LCBUOwoJaW50IG4sIG07CgoJLy8gZnJlb3Blbigic2FtcGxlX2lucHV0LnR4dCIsICJyIiwgc3RkaW4pOwoKCXNldGJ1ZihzdGRvdXQsIE5VTEwpOwoKCXNjYW5mKCIlZCIsICZUKTsKCglmb3IgKHRlc3QgPSAxOyB0ZXN0IDw9IFQ7ICsrdGVzdCkgewoKCQlzY2FuZigiJWQlZCIsICZuLCAmbSk7CgoJCWluaXQobik7CgoJCWlmIChydW4obSkpIHsKCQkJcHJpbnRmKCIjJWQgMTAwXG4iLCB0ZXN0KTsKCQl9CgkJZWxzZSB7CgkJCXByaW50ZigiIyVkIDBcbiIsIHRlc3QpOwoJCX0KCQkKCQkvLyBkZWJ1ZwoJCWZvciAoYXV0byBhIDogZGlyWyIvYWEvIl0pewoJCSAgICBjb3V0IDw8IGEgPDwgJyAnOwoJCX0gY291dCA8PCAnXG4nOwoJfQogICAgCglyZXR1cm4gMDsKfQ==