#include<iostream>
#include<cstring>
#include<vector>

using namespace std;

bool  slove(int tmp[])
{
  for(int i=1;i<10;i++)
    {
      while(tmp[i]!=0)
	{
	  if(tmp[i]>=3)
	    {
	      tmp[i]-=3;
//	      cout<<i<<":3set"<<endl;
	    }
	  else if(i<8&&tmp[i]>0&&tmp[i+1]>0&&tmp[i+2]>0)
	    {
	      tmp[i]--;
	      tmp[i+1]--;
	      tmp[i+2]--;
//	      cout<<i<<":3zyun"<<endl;
	    }
	  else
	    {
	      return false;
	    }
	}
    }
  return true;
}


int main()
{
  string str;
  for(;cin>>str;)
    {
      int data[10];
      memset(data,0,sizeof(data));
      for(int i=0;i<str.size();i++)
	{
	  data[str[i]-'0']++;
	}
      for(int i=0;i<10;i++)
	{
	}

      vector<int> ans;
      //      int tmp1[10];
      //      memcpy(tmp1, data, sizeof(data));
      for(int i=1;i<10;i++)
	{
	  if(data[i]>3)
	    continue;
//	  cout<<i<<":add"<<endl;
	  for(int j=1;j<10;j++)
	    {
	      int tmp[10];
	      memcpy(tmp, data, sizeof(tmp));
	      tmp[i]++;
	      if(tmp[j]>1)
		{
		  /*
		  for(int xx=1;xx<10;xx++)
		    for(int yy=tmp[xx];yy>0;yy--)
		      cout<<xx;		  
		  cout<<endl;
		  */
		  tmp[j]-=2;
	//	  cout<<j<<":head"<<endl;		  
		  if(slove(tmp))
		    {
		      ans.push_back(i);
		      j=10;
		    }		  
		}
	    }
	 	  
	}

       for(int i=0;i<ans.size();i++)
	    {
	      cout<<ans[i];
	      if(i==ans.size()-1)
		cout<<endl;
	      else
		cout<<" ";
	    }
if(ans.size()<1)
  cout<<0<<endl;      
       
    }
}