fork(2) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define ll int
  5. #define f(i,n) for(ll i=0;i<n;i++)
  6.  
  7. ll n,m;ll mx=-1;
  8. ll dp[60][60];ll f;
  9. char a[60][60];
  10. bool check(ll i,ll j)
  11. {
  12. if((i>=0&&i<n))if((j>=0&&j<m))return 1;
  13. else return 0;
  14. }
  15. void fn(ll i,ll h)
  16. {if(dp[i][h]==-2)return ;
  17. ll j,l;
  18. j=i-1;l=h;
  19. if(check(j,l))if(a[j][l]==1+a[i][h])
  20. {
  21. dp[j][l]=max(dp[j][l],1+dp[i][h]);mx=max(mx,dp[j][l]);
  22. if(dp[j][l]==1+dp[i][h])
  23.  
  24. fn(j,l);
  25. }
  26. j=i;l=h-1;
  27. if(check(j,l))if(a[j][l]==1+a[i][h])
  28. {
  29. dp[j][l]=max(dp[j][l],1+dp[i][h]);mx=max(mx,dp[j][l]);
  30. if(dp[j][l]==1+dp[i][h])fn(j,l);
  31. }
  32. j=i+1;l=h;
  33. if(check(j,l))if(a[j][l]==1+a[i][h])
  34. {
  35. dp[j][l]=max(dp[j][l],1+dp[i][h]);mx=max(mx,dp[j][l]);
  36. if(dp[j][l]==1+dp[i][h])fn(j,l);
  37. }
  38. j=i;l=h+1;
  39. if(check(j,l))if(a[j][l]==1+a[i][h])
  40. {
  41. dp[j][l]=max(dp[j][l],1+dp[i][h]);mx=max(mx,dp[j][l]);
  42. if(dp[j][l]==1+dp[i][h])fn(j,l);
  43. }
  44. j=i-1;l=h-1;
  45. if(check(j,l))if(a[j][l]==1+a[i][h])
  46. {
  47. dp[j][l]=max(dp[j][l],1+dp[i][h]);mx=max(mx,dp[j][l]);
  48. if(dp[j][l]==1+dp[i][h])fn(j,l);
  49. }
  50. j=i-1;l=h+1;
  51. if(check(j,l))if(a[j][l]==1+a[i][h])
  52. {
  53. dp[j][l]=max(dp[j][l],1+dp[i][h]);mx=max(mx,dp[j][l]);
  54. if(dp[j][l]==1+dp[i][h]) fn(j,l);
  55. }
  56. j=i+1;l=h-1;
  57. if(check(j,l))if(a[j][l]==1+a[i][h])
  58. {
  59. dp[j][l]=max(dp[j][l],1+dp[i][h]);mx=max(mx,dp[j][l]);
  60. if(dp[j][l]==1+dp[i][h])fn(j,l);
  61. }
  62. j=i+1;l=h+1;
  63. if(check(j,l))if(a[j][l]==1+a[i][h])
  64. {
  65. dp[j][l]=max(dp[j][l],1+dp[i][h]);mx=max(mx,dp[j][l]);
  66. if(dp[j][l]==1+dp[i][h])fn(j,l);
  67. }
  68. if(dp[i][h]==0&&a[i][h]=='A'){f=1;return ;}
  69. if(dp[i][h]==-1)dp[i][h]=-2;return ;
  70. }
  71.  
  72. int main()
  73. {//freopen("input.txt","r",stdin);
  74. ios_base::sync_with_stdio(0);
  75. cin>>n>>m;ll u=1;
  76. while(n!=0&&m!=0)
  77. {
  78. f(i,n)f(j,m){cin>>a[i][j];dp[i][j]=-1;
  79. }
  80. mx=-1;
  81. f(i,n)
  82. f(j,m)
  83. {
  84. if(a[i][j]=='A')
  85.  
  86. {dp[i][j]=0;fn(i,j);}
  87.  
  88. }if(mx!=-1){cout<<"Case"<<" "<<u<<": "<<mx+1<<endl;u++;}
  89. else if(f){cout<<"Case"<<" "<<u<<": "<<1<<endl;u++;}
  90. else {cout<<"Case"<<" "<<u<<": "<<mx+1<<endl;u++;}
  91. cin>>n>>m;f=0;
  92. }
  93.  
  94. return 0;
  95. }
  96.  
Success #stdin #stdout 0s 4416KB
stdin
Standard input is empty
stdout
Standard output is empty