#include <iostream>
#include <string>
#include <vector>
template <typename T>
std::istream& operator >>(std::istream& input, std::vector<T>& v)
{
for (T& a : v)
input >> a;
return input;
}
void answer(unsigned x, unsigned y)
{
std::cout << x << ' ' << y << '\n';
}
void solve(const std::vector<std::string>& g)
{
const size_t h = g.size(), w = g[0].length();
const auto count = [&](size_t x) {
unsigned k = 0;
for (size_t i = 0; i < h && g[h-1-i][x] == '*'; ++i)
++k;
return k;
};
unsigned u = 0, d = 0;
for (size_t i = 1; i < w; ++i) {
const unsigned x = count(i-1), y = count(i);
if (x > y)
d = std::max(d, x - y);
else
u = std::max(u, y - x);
}
answer(u, d);
}
int main()
{
std::cin.tie(nullptr)->sync_with_stdio(false);
size_t n, m;
std::cin >> n >> m;
std::vector<std::string> g(n);
std::cin >> g;
solve(g);
return 0;
}
1143B - Nirvana | 1285A - Mezo Playing Zoma |
919B - Perfect Number | 894A - QAQ |
1551A - Polycarp and Coins | 313A - Ilya and Bank Account |
1469A - Regular Bracket Sequence | 919C - Seat Arrangements |
1634A - Reverse and Concatenate | 1619C - Wrong Addition |
1437A - Marketing Scheme | 1473B - String LCM |
1374A - Required Remainder | 1265E - Beautiful Mirrors |
1296A - Array with Odd Sum | 1385A - Three Pairwise Maximums |
911A - Nearest Minimums | 102B - Sum of Digits |
707A - Brain's Photos | 1331B - Limericks |
305B - Continued Fractions | 1165B - Polycarp Training |
1646C - Factorials and Powers of Two | 596A - Wilbur and Swimming Pool |
1462B - Last Year's Substring | 1608B - Build the Permutation |
1505A - Is it rated - 2 | 169A - Chores |
765A - Neverending competitions | 1303A - Erasing Zeroes |