#include <stdio.h>
#include <math.h>
int* compute(int arr2[], int m, int i, int sum1, int sum2){
int arr[2], sub = 0;; //存放两个参数 找到本轮最优解时候的sum 和 j
for(int n = 0; n < i; n++)
sum2 -= arr2[n]; //本轮初始值
for(int j = m - 1; j >= i; j--){
if(abs(sum2 - arr2[j] - sum1) < abs(sum2 - sum1)) //比较差值
sum2 -= arr2[j];
else{
arr[0] = sum2; //当轮最优解元素和
arr[1] = j; //当轮最优解尾元素下标
break;
}
}
return arr;
}
/*思路:从完整数组开始,不断去掉前面的一个元素,用剩下的子数组进行下轮比较;
*每轮判断规则(如果满足减去数组2当前的最后一个元素后,如果和数组1差值变小了,
*就继续减去尾元素,直到满足差值最小,得到本轮最优解; 用该值和下一轮进行比较,
*如果下一轮差值更小,则继续切割数组,找更下一轮,直到不满足,然后根据i,j位置输出数组元素;
*/
int main(){
int n, m, res, arr1[10], arr2[10], sum1 = 0, sum2 = 0;
scanf("%d %d", &n, &m);
for(int i = 0; i < n; i++){
scanf("%d", &arr1[i]);
sum1 += arr1[i];
}
for(int j = 0; j < m; j++){
scanf("%d", &arr2[j]);
sum2 += arr2[j];
}
int min = *(compute(arr2, m, 0, sum1, sum2));
for(int i = 1; i < m; i++){
res = *compute(arr2, m, i, sum1, sum2);
if(abs(res - sum1) < abs(min - sum1)) //比较差值
min = res;
else{
i--; //不满足要回溯
int j = *(compute(arr2, m, i, sum1, sum2) + 1);
for(int s = i; s <= j; s++)
printf("%d ", arr2[s]);
break;
}
}
return 0;
}