#include <iostream>
#include <cstring>
#define inf 0x3f3f3f3f
#define dppa dp_min[begin][end][part]
#define dppi dp_max[begin][end][part]
using namespace std;
int arr[55], n, m, sum[130];
int dp_min[130][130][130], dp_max[130][130][130];
int mod10(int x) {
if(x < 0) {
x %= 10;
return x + 10;
}
return x % 10;
}
int dfs_min(int begin, int end, int part){
if(dppi != inf) {
return dppi;
}
if(part == 1) {
return dppi = mod10(sum[end] - sum[begin - 1]);
}
int ans = inf;
for(int i = begin; i < end; i++) {
for(int j = 1; j < part; j++) {
if(i - begin + 1 < j || end - i + 2 < part - j) {
continue;
}
ans = min(ans, dfs_min(begin, i, j) * dfs_min(i + 1, end, part - j));
}
}
dppi = ans;
return ans;
}
int dfs_max(int begin, int end, int part){
if(dppa != inf) {
return dppa;
}
if(part == 1) {
return dppa = mod10(sum[end] - sum[begin - 1]);
}
int ans = -1;
for(int i = begin; i < end; i++) {
for(int j = 1; j < part; j++) {
if(i - begin + 1 < j || end - i < part - j) {
continue;
}
ans = max(ans, dfs_max(begin, i, j) * dfs_max(i + 1, end, part - j));
}
}
dppa = ans;
return ans;
}
int main(){
memset(dp_min, 0x3f, sizeof(dp_min));
memset(dp_max, 0x3f, sizeof(dp_max));
cin >> n >> m;
for(int i = 1; i <= n; i++) {
cin >> arr[i];
sum[i] = sum[i - 1]+ arr[i];
}
for(int i = 1; i <= n - 1; i++) {
sum[n + i] = sum[n + i - 1] + arr[i];
}
int ansin = inf, ansax = -1;
for(int i = 1; i <= n; i++) {
ansin = min(ansin, dfs_min(i, n + i - 1, m));
ansax = max(ansax, dfs_max(i, n + i - 1, m));
}
cout << ansin << endl << ansax << endl;
return 0;
}