#include <stdio.h>
#include <string.h>
#define maxn 100005
struct node
{
int v, id, next;
}edge[maxn*4];
bool vis[maxn], op[maxn];
int a[maxn], b[maxn], k[maxn], lca[maxn], to[maxn];
int head[maxn], opr[maxn], fa[maxn], father[maxn];
long long int valnode[maxn], valedge[maxn];
int n, m, cnt;
void add(int u, int v, int id, int h[])
{
edge[cnt].v = v;
edge[cnt].id = id;
edge[cnt].next = h[u];
h[u] = cnt++;
}
int find(int x)
{
if(x == father[x]) return x;
return find(father[x]);
}
void tarjan(int now, int f)
{
father[now] = now;
fa[now] = f;
vis[now] = true;
for(int i = opr[now];i != -1;i = edge[i].next)
{
int v = edge[i].v, id = edge[i].id;
if(vis[v]) lca[id] = find(v);
}
for(int i = head[now];i != -1;i = edge[i].next)
{
int v = edge[i].v, id = edge[i].id;
if(v == f) continue;
tarjan(v, now);
to[id] = v;
father[v] = now;
}
}
void init()
{
cnt = 0;
memset(head, -1, sizeof(head));
memset(opr, -1, sizeof(opr));
memset(vis, 0, sizeof(vis));
memset(valedge, 0, sizeof(valedge));
memset(valnode, 0, sizeof(valnode));
}
void getans(int now, int f)
{
for(int i = head[now];i != -1;i = edge[i].next)
{
int v = edge[i].v, id = edge[i].id;
if(v == f) continue;
getans(v, now);
valnode[now] += valnode[v];
valedge[now] += valedge[v];
}
}
int main()
{
int t, i, u, v, Case;
char ask[5];
scanf("%d", &t);
Case = 1;
while(t--)
{
init();
scanf("%d %d", &n, &m);
for(i = 0;i < n - 1;i++)
{
scanf("%d %d", &u, &v);
add(u, v, i, head);
add(v, u, i, head);
}
for(i = 0;i < m;i++)
{
scanf("%s %d %d %d", ask, &a[i], &b[i], &k[i]);
op[i] = ask[3] == '1';
add(a[i], b[i], i, opr);
add(b[i], a[i], i, opr);
}
tarjan(1, -1);
fa[1] = 0;
for(i = 0;i < m;i++)
{
if(op[i])
{
valnode[a[i]] += k[i];
valnode[b[i]] += k[i];
valnode[lca[i]] -= k[i];
valnode[fa[lca[i]]] -= k[i];
}
else
{
valedge[a[i]] += k[i];
valedge[b[i]] += k[i];
valedge[lca[i]] -= 2*k[i];
}
}
getans(1, -1);
printf("Case #%d:\n", Case++);
for(i = 1;i <= n;i++)
printf("%lld%c", valnode[i], i==n?'\n':' ');
for(i = 0;i < n - 1;i++)
printf("%lld%c", valedge[to[i]], i==n-2?'\n':' ');
if(n == 1) printf("\n");
}
return 0;
}
#include <string.h>
#define maxn 100005
struct node
{
int v, id, next;
}edge[maxn*4];
bool vis[maxn], op[maxn];
int a[maxn], b[maxn], k[maxn], lca[maxn], to[maxn];
int head[maxn], opr[maxn], fa[maxn], father[maxn];
long long int valnode[maxn], valedge[maxn];
int n, m, cnt;
void add(int u, int v, int id, int h[])
{
edge[cnt].v = v;
edge[cnt].id = id;
edge[cnt].next = h[u];
h[u] = cnt++;
}
int find(int x)
{
if(x == father[x]) return x;
return find(father[x]);
}
void tarjan(int now, int f)
{
father[now] = now;
fa[now] = f;
vis[now] = true;
for(int i = opr[now];i != -1;i = edge[i].next)
{
int v = edge[i].v, id = edge[i].id;
if(vis[v]) lca[id] = find(v);
}
for(int i = head[now];i != -1;i = edge[i].next)
{
int v = edge[i].v, id = edge[i].id;
if(v == f) continue;
tarjan(v, now);
to[id] = v;
father[v] = now;
}
}
void init()
{
cnt = 0;
memset(head, -1, sizeof(head));
memset(opr, -1, sizeof(opr));
memset(vis, 0, sizeof(vis));
memset(valedge, 0, sizeof(valedge));
memset(valnode, 0, sizeof(valnode));
}
void getans(int now, int f)
{
for(int i = head[now];i != -1;i = edge[i].next)
{
int v = edge[i].v, id = edge[i].id;
if(v == f) continue;
getans(v, now);
valnode[now] += valnode[v];
valedge[now] += valedge[v];
}
}
int main()
{
int t, i, u, v, Case;
char ask[5];
scanf("%d", &t);
Case = 1;
while(t--)
{
init();
scanf("%d %d", &n, &m);
for(i = 0;i < n - 1;i++)
{
scanf("%d %d", &u, &v);
add(u, v, i, head);
add(v, u, i, head);
}
for(i = 0;i < m;i++)
{
scanf("%s %d %d %d", ask, &a[i], &b[i], &k[i]);
op[i] = ask[3] == '1';
add(a[i], b[i], i, opr);
add(b[i], a[i], i, opr);
}
tarjan(1, -1);
fa[1] = 0;
for(i = 0;i < m;i++)
{
if(op[i])
{
valnode[a[i]] += k[i];
valnode[b[i]] += k[i];
valnode[lca[i]] -= k[i];
valnode[fa[lca[i]]] -= k[i];
}
else
{
valedge[a[i]] += k[i];
valedge[b[i]] += k[i];
valedge[lca[i]] -= 2*k[i];
}
}
getans(1, -1);
printf("Case #%d:\n", Case++);
for(i = 1;i <= n;i++)
printf("%lld%c", valnode[i], i==n?'\n':' ');
for(i = 0;i < n - 1;i++)
printf("%lld%c", valedge[to[i]], i==n-2?'\n':' ');
if(n == 1) printf("\n");
}
return 0;
}