/************************************************
Algorithmen und Problemloesungen mit C++,
http://www.algorithmen-und-problemloesungen.de
Copyright @2007 by Doina Logofatu
************************************************/

#include <stack>
#include <fstream>
#include <vector>
#include <algorithm>

int main(){    
    std::ifstream in("graph.in");
    std::ofstream out("dfs.out");
    short n, k, a[100][100];
    std::stack<short> st;
    std::vector<short> v;
    in >> n >> k;
    st.push(k-1);
    for(short i=0; i<n; i++)
      for(short j=0; j<n; j++)
        in >> a[i][j];
    while(!st.empty()){
     short t = st.top();     
     for(short i=n; i>=0; --i)
      if(a[t][i] && 
         find(v.begin(), v.end(), i)==v.end()
        ){
        st.push(i); 
      }    
     if(find(v.begin(), v.end(), t)==v.end()){
       v.push_back(t);
     } else st.pop();   
    }    
    for(short i=0; i<v.size(); i++)
     out << v[i]+1 << " ";
    return 0;
}
