#include using namespace std; typedef long long ll; typedef vector vi; typedef vector vl; typedef pair pii; typedef pair pll; typedef int _loop_int; #define REP(i,n) for(_loop_int i=0;i<(_loop_int)(n);++i) #define FOR(i,a,b) for(_loop_int i=(_loop_int)(a);i<(_loop_int)(b);++i) #define FORR(i,a,b) for(_loop_int i=(_loop_int)(b)-1;i>=(_loop_int)(a);--i) #define DEBUG(x) cout<<#x<<": "<0)CHMIN(dist[i][j], dist[i-1][j]+c); if(j>0)CHMIN(dist[i][j], dist[i][j-1]+c); } pass[h-1][w-1] = true; REP(i,h)REP(j,w)canleft[i][j]=canup[i][j]=false; FORR(i,0,h)FORR(j,0,w)if(i!=h-1 || j!=w-1){ pass[i][j] = false; if(i 0 && pass[y][x]; int nmsk = (msk & del) ^ (nbit << x); dp[1][nmsk] = (dp[1][nmsk] + dp[0][msk]) % MOD; } if(mp[y][x]=='?'){ REP(msk,1<>(w-1))&1){ ans = (ans + dp[0][i]) % MOD; } return pii(dist[h-1][w-1], ans); } int poy[353][353]; int d2[353][353]; int calc(){ d2[0][0] = poy[0][0]; REP(i,h)REP(j,w)if(i!=0 || j!=0){ d2[i][j] = 252521; if(i>0)CHMIN(d2[i][j], d2[i-1][j]+poy[i][j]); if(j>0)CHMIN(d2[i][j], d2[i][j-1]+poy[i][j]); } return d2[h-1][w-1]; } pii naive(){ int n = h*w; int mindist = 252521; int ans = 0; REP(msk,1<>id)&1){ if(mp[i][j]=='?'){ poy[i][j] = 1; }else{ ok = false; } }else{ if(mp[i][j]=='?'){ poy[i][j] = 252; mul = mul * 8 % MOD; }else{ poy[i][j] = mp[i][j]-'0'; } } } if(!ok)continue; int ddd = calc(); if(ddd < mindist){ mindist = ddd; ans = mul; }else if(ddd == mindist){ ans = (ans + mul) % MOD; } } return pii(mindist, ans); } int main(){ scanf("%d%d",&h,&w); REP(i,h)scanf("%s",mp[i]); pii ans = solve(); printf("%d\n%d\n",ans.first, ans.second); // pii nai = naive(); // printf("%d %d\n",nai.first,nai.second); return 0; // while(true){ // h = 3; // w = 3; // REP(i,h)REP(j,w){ // int x = rand() % 14; // if(x>=9){ // mp[i][j] = '?'; // }else{ // mp[i][j] = '1'+x; // } // } // pii ans = solve(); // pii nai = naive(); // if(ans != nai){ // printf("%d %d\n",h,w); // REP(i,h)puts(mp[i]); // printf("ans : %d %d\n", ans.first, ans.second); // printf("nai : %d %d\n", nai.first, nai.second); // break; // } // } return 0; }