function main(){
  var i = 0;
  while(true){
    var fieldInfo = input[i].split(' ');
    var width = fieldInfo[0] - 0;//toInt
    var height = fieldInfo[1] - 0;//toInt
           
    // 0 0が入力された
    if(!width && !height){
      break;
    }
           
    var start;
    var goal;
    var elem = [[],[],[],[],[]];
   
    var c;
    for(var y = height; y--;){
      i++;//1行進める
      var ni = input[i];
      for(var x = 0; x < width; x++){// なぜか順列アクセスの方が早い
        c = ni[x];
   
        if(c === '.'){
          // ドットが一番多いはずなので、先にひっかけてしまう
        }else if(c === '1' || c === '2' || c === '3' || c === '4' || c === '5'){
          // 次に多いはずの属性を潰す
          // FIXME:判定条件は最適化できそう
          var e = elem[c - 1];
          e[e.length] = pos(x, y);
        }else if(c === 'S'){
          start = pos(x, y);
        }else{
          goal = pos(x, y);
        }
           
      }
    }
           
    var INF = 1 << 30;
    var bestElement = -1;
    var distance = INF;
               
    // 属性ごとにループ
    for (var startElem = 0; startElem < 5; startElem++) {
      // DPの初期化 DP[属性][同じ属性内の連番]
      var dp = [[],[],[],[],[]];
      for(var h = 0; h < 5; h++){
        var hLength = elem[h].length;
        dp[h].length = hLength;
        var initdph = dp[h];
        for(var hidx = 0; hidx < hLength; hidx++){
          initdph[hidx] = INF;
        }
      }
                 
      // s->1->2->3->4->g
      // なので、ループは間の-> * 3分まわす
      // (20140406 ループすると配列キャッシュが利かないから展開してみる)
      var e1 = (startElem + 1) % 5;
      var e2 = (startElem + 2) % 5;
      var e3 = (startElem + 3) % 5;
      var e4 = (startElem + 4) % 5;

      var dpe1 = dp[e1];
      var dpe2 = dp[e2];
      var dpe3 = dp[e3];
      var dpe4 = dp[e4];

      var ele1 = elem[e1];
      var ele2 = elem[e2];
      var ele3 = elem[e3];
      var ele4 = elem[e4];
      
      var e1len = ele1.length;
      var e2len = ele2.length;
      var e3len = ele3.length;
      var e4len = ele4.length;

      for (var j = 0; j < e1len; j++) {
        // s→e1を計算
        var dpe1j = dpe1[j] = dist(start, ele1[j]);
        var ele1j = ele1[j];
        // e1->e2を計算
        for (var k = 0; k < e2len; k++) {
          dpe2[k] = min(
            dpe2[k],
            dpe1j + 
            dist(ele1j, ele2[k]));
        }
      }

      // e2->e3
      for (var j = 0; j < e2len; j++) {
        var dpe2j = dpe2[j];
        var ele2j = ele2[j];
        for (var k = 0; k < e3len; k++) {
          dpe3[k] = min(
            dpe3[k],
            dpe2j + 
            dist(ele2j, ele3[k]));
        }
      }

      // e3->e4
      for (var j = 0; j < e3len; j++) {
        var dpe3j = dpe3[j];
        var ele3j = ele3[j];
        for (var k = 0; k < e4len; k++) {
          dpe4[k] = min(
            dpe4[k],
            dpe3j + 
            dist(ele3j, ele4[k]));
        }
      }

      for (var j = 0; j < e4len; j++) {
        // e4->g
        var d = dpe4[j] + dist(ele4[j], goal);
                   
        if (d < distance) {
          distance = d;
          bestElement = startElem + 1;
        }
                   
      }
                 
    }
               
    if (distance == INF) {
      console.log("NA");
    } else {
      console.log(bestElement + " " + distance);
    }
           
    i++;
  }
             
           
}
           
function dist(from, to){
  // x座標とy座標の切り出し(11ビット右シフトでxを、2047(下位10ビット1)とのAND演算でyを取り出す)
  return abs((from >> 11) - (to >> 11)) + abs((from & 2047) - (to & 2047));
}
           
function min(a, b){
  // ビット演算で高速化
  var t = a - b;
 return b + (t & (t >> 31));
}
           
function pos(a, b){
  // 2^10 = 1024なので、下位10ビットでy座標を、上位ビットでx座標を表す
  return (a << 11) + b;
}
          
function abs(a){
 // ビット演算で高速化
 var mask = a >> 31;
 return (a ^ mask) - mask;
}
           
var
input = '';
           
process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', function(chunk) {
  input += chunk;
});
process.stdin.on('end', function() {
  input = input.split('\n');
  main();
});

Measured memory_bytes: 51724