//hdu 1260 dp
//题目说如何最快让每个人买到票,每组数据给出
//第一行:多少人买票(k),第二行:每个人买自己的一张票的时间(k个数),
//第三行:连续两个人一起买票的时间(比如 第一个数表示第一个人和
//第二个人一起买的时间,第二个数表示第二个人和第三个人一起的时间...(k-1个数))
//思路:dp[i]表示 到第i 个人买票的最少时间
//因此 dp[i] = min{ dp[i-1] + 第i 个人买票时间, dp[i-2] + (第i-1个人和第i一起买票的时间) }
//这样只要知道 dp[i-1] 和dp[i-2] 就可以了,因此可以用滚动数组优化空间
#include <stdio.h>
#include <string.h>
#define N 2005
int one[N], two[N], dp[3];
int main()
{
int n_case, n_tick;
scanf("%d", &n_case);
while(n_case--)
{
scanf("%d", &n_tick);
for(int i = 1; i <= n_tick; ++i)
scanf("%d", &one[i]);
for(int i = 1; i < n_tick; ++i)
scanf("%d", &two[i]);
dp[0] = 0;
dp[1] = one[1];
for(int i = 2; i <= n_tick; ++i)
{ //记录到 第 i-1 个人的最少时间 加上 i 买票的时间
int tmp = dp[(i-1) % 3] + one[i];
//记录到 第 i-2 个人的最少时间 加上 (第i-1 个人 和 第i个人一起买票的时间)
int now = dp[(i-2) % 3] + two[i-1];
if(now < tmp) //判断哪一种方式买票最省时间
dp[i%3] = now;
else
dp[i%3] = tmp;
// int tmp = dp[i-1] + one[i];
// if(dp[i - 2] + two[i-1] < tmp)
// dp[i] = dp[i-2] + two[i-1];
// else
// dp[i] = tmp;
}
int h, m, s;
s = dp[n_tick%3] % 60;
m = (dp[n_tick%3] / 60) % 60;
h = (dp[n_tick%3] / 60 / 60) % 60 + 8;
// s = dp[n_tick] % 60;
// m = (dp[n_tick] / 60) % 60;
// h = (dp[n_tick] / 60 / 60) % 60 + 8;
//注意输出格式
printf("%02d:%02d:%02d ", h, m, s);
if(h < 12 || !(m+s)) //12:00以前或12:00:00为am
puts("am");
else
puts("pm");
}
return 0;
}