#include<bits/stdc++.h>
using namespace std;


struct node{
  int base=-2;
  int lx=10000;
  int rx=-1000;
  double g=0;
};
int w,h;

vector<node> node;

bool isok;
bool isrange(int i,int j){return 0<=i && i<h && 0<=j && j<w;};
int dh[]={1,-1,0,0};
int dw[]={0,0,1,-1};

pair<int,double> check(int base){

  int cnt=0;
  for(int i=0;i<node.size();i++){
    if(node[i].base==base){
      cnt++;
    }
  }
  
  if(cnt==0){
    if(!(node[base].lx<node[base].g && node[base].g<node[base].rx)) isok=false;
    return {1,node[base].g};
  }
  double g=0;
  int cn=0;
  for(int i=0;i<node.size();i++){
    if(node[i].base==base){
      auto ret=check(i);
      cn+=ret.first;
      g+=ret.second*ret.first;
    }
  }
  g/=cn;
  g=(g*cn+node[base].g)/(cn+1);
  isok&=(node[base].lx<g && g<node[base].rx);
  return {cn+1,g};
}

void make_node(int num,vector<vector<int>> &c){
  for(int i=0;i<h;i++){
    for(int j=0;j<w;j++){
      if(c[i][j]==num){
	node[num].g+=j+1.0/2;
	if(i==0){
	  node[num].base=-1;
	  node[num].lx=min(node[num].lx,j);
	  node[num].rx=max(node[num].rx,j+1);
	}
	else if(c[i-1][j]>=0 && c[i-1][j]!=num){

	  node[num].base=c[i-1][j];
	  node[num].lx=min(node[num].lx,j);
	  node[num].rx=max(node[num].rx,j+1);
	}
      }
    }
  }
  node[num].g/=4;
  return;
}

void nummer(int i,int j,int num,const char org,vector<vector<char>> &b,vector<vector<int>> &c){
  if(c[i][j]!=-1) return;
  c[i][j]=num;
  for(int dir=0;dir<4;dir++){
    int toh=i+dh[dir];
    int tow=j+dw[dir];
    if(isrange(toh,tow) && b[toh][tow]==org){
      nummer(toh,tow,num,org,b,c);
    }
  }
  return;
}

int main(){
  while(cin>>w>>h,w){
    vector<vector<char>> b(h,vector<char>(w));
    for(int i=h-1;i>=0;i--){
      for(int j=0;j<w;j++){
	cin>>b[i][j];
      }
    }
    vector<vector<int>> c(h,vector<int>(w,-1));
    int number=0;
    for(int i=0;i<h;i++){
      for(int j=0;j<w;j++){
	if(c[i][j]==-1 && isdigit(b[i][j])){
	  nummer(i,j,number,b[i][j],b,c);
	  number++;
	}
      }
    }
    node.clear();
    node.resize(number);
    for(int i=0;i<number;i++){
      make_node(i,c);
    }
    isok=true;

    int base=-2;

    for(int i=0;i<number;i++){
      if(node[i].base==-1){
	base=i;
	break;
      }
    }

    check(base);
    cout<<(isok?"STABLE":"UNSTABLE")<<endl;
  }
  return 0;
}