#include<bits/stdc++.h>
using namespace std;
using lnt = long long;
const int INF = 0X3F3F3F3F;
const int N = 5e1+10;
const int M = 9 + 10;
const int A = 1e5;
const int MOD = 10;
lnt n, m;
lnt arr[N * 2];
lnt f_max[N * 2][N * 2][M];
lnt f_min[N * 2][N * 2][M];
lnt Ask(const int &l, const int &r)
{
if (l > r) return 0;
return (arr[r] - arr[l - 1] + A) % MOD;
}
void Solve(void)
{
cin >> n >> m;
for (int i = 1; i <= n; ++i)
{
cin >> arr[i];
}
for (int i = n + 1; i <= 2 * n; ++i)
{
arr[i] = arr[i - n];
}
for (int i = 1; i <= n * 2; ++i)
{
arr[i] = arr[i - 1] + arr[i];
}
memset(f_max, -INF, sizeof f_max);
memset(f_min, +INF, sizeof f_min);
for (int i = 1; i <= n * 2; ++i)
{
for (int j = 1; j <= n * 2; ++j)
{
f_max[i][j][1] = Ask(i, j);
f_min[i][j][1] = Ask(i, j);
}
}
for (int i = 1; i <= n * 2; ++i)
{
for (int j = i + 1; j <= 2 * n; ++j)
{
for (int k = 2; k <= m; ++k)
{
for (int mid = i; mid < j; ++mid)
{
f_max[i][j][k] = max(f_max[i][j][k], f_max[i][mid][k - 1] * f_max[mid + 1][j][1]);
f_min[i][j][k] = min(f_min[i][j][k], f_min[i][mid][k - 1] * f_min[mid + 1][j][1]);
}
}
}
}
lnt ans_max = -INF;
lnt ans_min = +INF;
for (int l = 1; l <= n; ++l)
{
int r = l + n - 1;
ans_max = max(ans_max, f_max[l][r][m]);
ans_min = min(ans_min, f_min[l][r][m]);
}
cout << ans_min << '\n' << ans_max;
}
signed main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
int T = 1;
while (T--) Solve();
return 0;
}