diff --git a/src/algorithm/CNDFS.cpp b/src/algorithm/CNDFS.cpp
index 8c1a4bf4213127ad73cad8370bd1cadbfba40cee..b4a4d6874dcf3ecb262a86df74fd817e771f722e 100644
--- a/src/algorithm/CNDFS.cpp
+++ b/src/algorithm/CNDFS.cpp
@@ -8,6 +8,7 @@
 #include <spot/twa/twagraph.hh>
 #include <thread>
 #include <vector>
+#include <utility>
 #include <spot/twa/twa.hh>
 #include <bddx.h>
 using namespace std;
@@ -22,18 +23,15 @@ struct end_state{
     const spot::state* right;
     bool isAcceptance;
 };
-
-struct graphEdge {
-    start_state ss;
-    end_state es;
-    int weight;
-};
-
-
+vector<pair<end_state, int> > SOG_successors;
 list<spot::formula> transitionNames;
 vector<bdd>temp;
-CNDFS::CNDFS(ModelCheckBaseMT *mcl, const spot::twa_graph_ptr &af, const uint16_t &nbTh) : mMcl(mcl), mAa(af),
-                                                                                           mNbTh(nbTh) {
+
+
+CNDFS::CNDFS(ModelCheckBaseMT *mcl, const spot::twa_graph_ptr &af, const uint16_t &nbTh) : mMcl(mcl), mAa(af), mNbTh(nbTh)
+{
+    sog_current_state = mcl->getInitialMetaState();
+    ba_current_state = mAa->get_init_state();
     spawnThreads();
 }
 
@@ -43,9 +41,8 @@ CNDFS::~CNDFS() {
         delete mlThread[i];
     }
 }
-/*
- * @Brief Create threads
- */
+
+// Create threads
 void CNDFS::spawnThreads() {
     for (int i = 0; i < mNbTh; ++i) {
         mlThread[i] = new thread(threadHandler, this);
@@ -59,68 +56,78 @@ void CNDFS::threadHandler(void *context) {
     ((CNDFS *) context)->computeProduct();
 }
 
-/*
- * @brief Compute the synchornized product
-*/
+//Compute the synchronized product
 void CNDFS::computeProduct() {
     uint16_t idThread = mIdThread++;
-    while (!mMcl->getInitialMetaState());
-    LDDState *initialAgg = mMcl->getInitialMetaState();
+    while (!sog_current_state);
+    LDDState *initialAgg = sog_current_state;
     while (!initialAgg->isCompletedSucc());
-
-    //fetch the state's atomic proposition
-    for (auto vv: mMcl->getInitialMetaState()->getMarkedPlaces(mMcl->getPlaceProposition()))
+   //fetch the state's atomic proposition
+    for (auto vv: sog_current_state->getMarkedPlaces(mMcl->getPlaceProposition()))
     {
         string name = string(mMcl->getPlace(vv));
         auto f = spot::formula::ap(name);
         transitionNames.push_back(f);
     }
-//    for (int i = 0; i < mMcl->getInitialMetaState()->Successors.size(); i++) {
-//        cout <<"------"<< " SOG's successor " << i << " ------" << endl;
-        int transition = mMcl->getInitialMetaState()->Successors.at(0).second; // je récupère le numéro de la première transition
-        auto name = string(mMcl->getTransition(transition)); // récuprer le nom de la transition
-        auto f = spot::formula::ap(name);// récuperer la proposition atomique qui correspond à la transition
-        transitionNames.push_back(f); // push state'S AP to edge'S AP
-        auto p = mAa->get_dict(); //avoir le dictionnaire bdd,proposition atomique
-        spot::twa_succ_iterator* ii = mAa->succ_iter(mAa->get_init_state());
-        if (ii->first())
-            do
-            {
-                temp.push_back(ii->cond());
-            }
-            while (ii->next());
-        mAa->release_iter(ii);
-//       cout << temp.size() << endl; // 22
-//       cout << p->bdd_map.size() << endl; //62
-        for (auto v: p->var_map)
-        {
-            cout << v.first << "-----" << v.second << endl;
-        }
 
-        for (auto it = transitionNames.begin(); it != transitionNames.end(); ++it) {
-            if (p->var_map.find(*it) != p->var_map.end()) { // Chercher la transition
-                const bdd  result=bdd_ithvar((p->var_map.find(*it))->second);
-                cout << "dbb result " << result << endl;
-                //chercher les transitions en commun avec les successeurs du premier etat
-                for (auto i: temp)
+    for (auto tn: transitionNames)
+    {
+        cout << "AP in state " << tn << endl;
+    }
+    for (int i = 0; i < sog_current_state->Successors.size(); i++)
+    {
+            cout <<"------"<< " SOG's successor " << i << " ------" << endl;
+            int transition = sog_current_state->Successors.at(i).second; // je récupère le numéro du transition
+            auto name = string(mMcl->getTransition(transition)); // récuprer le nom de la transition
+            auto f = spot::formula::ap(name);// récuperer la proposition atomique qui correspond à la transition
+            transitionNames.push_back(f); // push state'S AP to edge'S AP
+            auto p = mAa->get_dict(); //avoir le dictionnaire bdd,proposition atomique
+            spot::twa_succ_iterator* ii = mAa->succ_iter(ba_current_state);
+            if (ii->first())
+                do
                 {
-//                    if (result & (const bdd)i == bddtrue)
-                    bdd matched = i&result;
-                    if (matched!=bddfalse)
-                        cout << "matched bdd " << matched << endl;
+                    cout << "is succ acceptance " <<  mAa->state_is_accepting(ii->dst()) << endl;
+                    temp.push_back(ii->cond());
                 }
-                //new starting state
-                struct start_state ns = {mMcl->getInitialMetaState(), mAa->get_init_state()};
-                //new terminal state
-                struct end_state nd = {mMcl->getInitialMetaState()->Successors.at(0).first, ii->dst()}; // Pblm: here I want to detect the right successor of initial state of BA
-                struct graphEdge ge = {ns,nd,1};
-                cout << *it << " is a common transaction!" << endl; // p->var_map.find ( f )->second => donne la bdd
-            } else cout << *it << " isn't a common transaction" << endl;
-        }
-        transitionNames.pop_back();
+                while (ii->next());
+            mAa->release_iter(ii);
+            //cout << temp.size() << endl;
+            //cout << p->bdd_map.size() << endl;
+            for (auto v: p->var_map)
+            {
+                cout << v.first << "-----" << v.second << endl;
+            }
+
+            for (auto it = transitionNames.begin(); it != transitionNames.end(); ++it)
+            {
+                if (p->var_map.find(*it) != p->var_map.end())
+                { // Chercher la transition
+                    const bdd  result=bdd_ithvar((p->var_map.find(*it))->second);
+                    cout << "dbb result " << result << endl;
+                    //chercher les transitions en commun avec les successeurs du premier etat
+                    for (auto tr: temp)
+                    {
+                        bdd matched = tr&result;
+                        if (matched!=bddfalse)
+                        {
+                            cout << "matched bdd " << matched << endl;
+                            //new starting state
+                            struct start_state ns = {sog_current_state, ba_current_state, mAa->state_is_accepting(ba_current_state)};
+                            //new terminal state
+                            struct end_state nd = {sog_current_state->Successors.at(i).first, ii->dst(), mAa->state_is_accepting(ii->dst())};
+                            SOG_successors.push_back(make_pair(nd,transition));
+                            cout << *it << " is a common transaction!" << endl; // p->var_map.find ( f )->second => donne la bdd
+                        }
+                    }
+                } else cout << *it << " isn't a common transaction" << endl;
+            }
+            transitionNames.pop_back();
     }
 
-//}
+    for (auto p: SOG_successors) {
+        std::cout << "list of successors of current state " << "({ " << p.first.right << ", " << p.first.left << ", "  << p.first.isAcceptance << " }" << ", " << p.second << ") ";
+    }
+}
 spot::bdd_dict_ptr *CNDFS::m_dict_ptr;
 
 ////
diff --git a/src/algorithm/CNDFS.h b/src/algorithm/CNDFS.h
index d367f6a565c61be7e4245c7b97e8f35c1927d043..588582f5d80bb316fa6d77887b231a4d71da1db7 100644
--- a/src/algorithm/CNDFS.h
+++ b/src/algorithm/CNDFS.h
@@ -9,12 +9,15 @@
 #include <spot/tl/apcollect.hh>
 #include <cstdint>
 #include <thread>
+#include <spot/twa/twagraph.hh>
 class CNDFS {
 
 private:
     static constexpr uint8_t MAX_THREADS=64;
     ModelCheckBaseMT * mMcl;
     spot::twa_graph_ptr mAa;
+    LDDState* sog_current_state;
+    const spot::twa_graph_state* ba_current_state;
     uint16_t mNbTh;
     atomic<uint8_t> mIdThread;
     static void threadHandler(void *context);
@@ -23,9 +26,7 @@ private:
     void spawnThreads();
 public:
     CNDFS(ModelCheckBaseMT *mcl,const spot::twa_graph_ptr &af,const uint16_t& nbTh);
-//    CNDFS(shared_ptr<SogKripkeTh> k,const spot::twa_graph_ptr &af,const uint16_t& nbTh);
     virtual ~CNDFS();
-    //static void DfsBlue();
     void computeProduct();
     static spot::bdd_dict_ptr* m_dict_ptr;
 };
diff --git a/src/main.cpp b/src/main.cpp
index 80d45355b658f9030b11718a2de179cd6b083fc5..5c6337e1277f33e3a988d9c8bfc5417a8960e111 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -129,6 +129,7 @@ Formula negateFormula(const string &fileName)
 spot::twa_graph_ptr formula2Automaton(const spot::formula &f, spot::bdd_dict_ptr bdd, bool save_dot = false)
 {
     cout << "\nBuilding automata for not(formula)\n";
+
     spot::twa_graph_ptr af = spot::translator(bdd).run(f);
     cout << "Formula automata built." << endl;
 
@@ -515,7 +516,6 @@ int main(int argc, char **argv)
             // build automata of the negation of the formula
             auto d = spot::make_bdd_dict();
             spot::twa_graph_ptr af = formula2Automaton(negate_formula.f, d, dot_formula);
-
                        // create the SOG
             mcl->loadNet();
 
@@ -525,8 +525,11 @@ int main(int argc, char **argv)
             {
 
                 std::cout<<"------------CNDFS-------------"<<std::endl;
-//                auto k = std::make_shared<SogKripkeTh>(d, mcl, Rnewnet.getListTransitionAP(), Rnewnet.getListPlaceAP());
-//                CNDFS cndfs(k,af,1);
+//                threadSOG DR(Rnewnet, nb_th, uselace);
+//                LDDGraph g(&DR);
+//
+//                DR.computeSeqSOG(g);
+//                g.printCompleteInformation();
                 CNDFS cndfs(mcl,af,1);
 
                 return(0);