#include<bits/stdc++.h>
#define s(x) scanf("%d",&(x))
#define p(x) printf("%s ",x)
#define X 1010
using namespace::std;
#define fi(i,a,b) for(int i=(a);i<(b);i++)
int n ,m, f=0, maxi = 0;
char board[1010][1010], vs[1010][1010];
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
unordered_map<char, char> nxt;
int dfs(int r, int c)
{
vs[r][c] = 'b';
int cnt = (board[r][c] == 'A') ? 1 : 0;
int rc = cnt;
fi(i, 0, 4)
{
int xx = r + dx[i];
int yy = c + dy[i];
if(!f && xx >= 0 && xx < n && yy < m && yy >= 0)
{
if(board[xx][yy] == nxt[board[r][c]])
{
if(vs[xx][yy] == 'b')
{
f = 1;
maxi = 1;
return 0;
}
else if(!f)
{
// cout<<endl<<xx<<' '<<yy;
cnt += dfs(xx, yy);
rc = max(cnt, rc);
cnt=0;
}
}
}
}
vs[r][c] = 'a';
return rc;
}
int main()
{
int D= 1;
nxt.insert(make_pair('D', 'I'));
nxt['I'] = 'M';
nxt['M'] = 'A';
nxt['A'] = 'D';
scanf("%d %d", &n, &m);
fi(i, 0, n)
{
scanf("%s", board[i]);
memset(vs[i], 'a', m);
}
for(int i = 0 ; i < n && !f ; ++i)
for(int j = 0 ; j < m && !f ; ++j)
if(board[i][j] == 'D')
{
int auxi = dfs(i, j);
maxi = max(maxi, auxi);
D = 1;
}
if(D == 0 || maxi == 0) p("Poor Dima!");
else if(f) p("Poor Inna!");
else cout<<maxi;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBzKHgpIHNjYW5mKCIlZCIsJih4KSkKI2RlZmluZSBwKHgpIHByaW50ZigiJXMgIix4KQojZGVmaW5lIFggMTAxMAp1c2luZyBuYW1lc3BhY2U6OnN0ZDsKCiNkZWZpbmUgZmkoaSxhLGIpIGZvcihpbnQgaT0oYSk7aTwoYik7aSsrKQoKaW50IG4gLG0sIGY9MCwgbWF4aSA9IDA7CmNoYXIgYm9hcmRbMTAxMF1bMTAxMF0sIHZzWzEwMTBdWzEwMTBdOwppbnQgZHhbXSA9IHstMSwgMSwgMCwgMH07CmludCBkeVtdID0gezAsIDAsIC0xLCAxfTsKdW5vcmRlcmVkX21hcDxjaGFyLCBjaGFyPiBueHQ7CgppbnQgZGZzKGludCByLCBpbnQgYykKewogICAgdnNbcl1bY10gPSAnYic7CiAgICBpbnQgY250ID0gKGJvYXJkW3JdW2NdID09ICdBJykgPyAxIDogMDsKICAgIGludCByYyA9IGNudDsKICAgIGZpKGksIDAsIDQpCiAgICB7CiAgICAgICAgaW50IHh4ID0gciArIGR4W2ldOwogICAgICAgIGludCB5eSA9IGMgKyBkeVtpXTsKICAgICAgICBpZighZiAmJiB4eCA+PSAwICYmIHh4IDwgbiAmJiB5eSA8IG0gJiYgeXkgPj0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoYm9hcmRbeHhdW3l5XSA9PSBueHRbYm9hcmRbcl1bY11dKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmKHZzW3h4XVt5eV0gPT0gJ2InKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZiA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIG1heGkgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZighZikKICAgICAgICAgICAgICAgICAgICB7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgY291dDw8ZW5kbDw8eHg8PCcgJzw8eXk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNudCArPSBkZnMoeHgsIHl5KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBtYXgoY250LCByYyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNudD0wOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgfQogICAgdnNbcl1bY10gPSAnYSc7CiAgICByZXR1cm4gcmM7Cn0KaW50IG1haW4oKQp7CiAgICBpbnQgRD0gMTsKICAgIG54dC5pbnNlcnQobWFrZV9wYWlyKCdEJywgJ0knKSk7CiAgICBueHRbJ0knXSA9ICdNJzsKICAgIG54dFsnTSddID0gJ0EnOwogICAgbnh0WydBJ10gPSAnRCc7CgogICAgc2NhbmYoIiVkICVkIiwgJm4sICZtKTsKICAgIGZpKGksIDAsIG4pCiAgICB7CiAgICAgICAgc2NhbmYoIiVzIiwgYm9hcmRbaV0pOwogICAgICAgIG1lbXNldCh2c1tpXSwgJ2EnLCBtKTsKICAgIH0KICAgIGZvcihpbnQgaSA9IDAgOyBpIDwgbiAmJiAhZiA7ICsraSkKICAgICAgICBmb3IoaW50IGogPSAwIDsgaiA8IG0gJiYgIWYgOyArK2opCiAgICAgICAgaWYoYm9hcmRbaV1bal0gPT0gJ0QnKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGF1eGkgPSBkZnMoaSwgaik7CiAgICAgICAgICAgIG1heGkgPSBtYXgobWF4aSwgYXV4aSk7CiAgICAgICAgICAgIEQgPSAxOwogICAgICAgIH0KCmlmKEQgPT0gMCB8fCBtYXhpID09IDApICAgcCgiUG9vciBEaW1hISIpOwoKZWxzZSBpZihmKSAgIHAoIlBvb3IgSW5uYSEiKTsKCiBlbHNlIGNvdXQ8PG1heGk7CiAgICByZXR1cm4gMDsKfQo=