1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include<bits/stdc++.h>
using namespace std;
int tab[100010][2];
long long sumy[100010];
bool ktore[100010];

long long zlicz(int n)
{
	long long mini=0, wynik=0;
	for(int i=1;i<=n;i++)
	{
		sumy[i]=sumy[i-1] + tab[i][ktore[i]];
		wynik=max(wynik, sumy[i]-mini);
		mini = min(mini, sumy[i]);
	}
	return wynik;
	
}
int main()
{
	int n, i, m;
	long long naj=1000000000000000000, ij;
	scanf("%d%d", &n, &m);
	for(i=1;i<=n;i++)
		scanf("%d", &tab[i][0]);
	for(i=1;i<=n;i++)
		scanf("%d", &tab[i][1]);
	long long p=(1<<n);
	for(long long j=(1<<(n-m))-1;j<p;j++)
	{
		long long k=j, x=0;
		for(i=n;i>=1;i--)
		{
			ktore[i]=k%2;
			k/=2;
			if(ktore[i]==0)
				x++;
		}
		if(x!=m)
			continue;
		long long w = zlicz(n);
		/*
		printf("%lld:%lld ", j, x);
		for(int xx=1;xx<=n;xx++)
			printf("%d ", ktore[xx]);
		printf("  %lld\n", w);
		*/if(w<naj)
		{
			naj=w;
			ij=j;
		}
		
	}
	printf("%lld\n", naj);
	for(i=n;i>=1;i--)
	{
		ktore[i]=ij%2;
		ij/=2;
	}
	for(i=1;i<=n;i++)
	{
		printf("%c", 'A'+ktore[i]);
	}
}