func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Edge {     int v, next;   } edge[100010];   int head[10];   int pos;   void insert(int x, int y) {     edge[pos].v = y;     edge[pos].next = head[x];     head[x] = pos++;   }   int du[10];   int pp[100010];   int qq;   int fa[10];   int find(int x) {     if (fa[x] != x) fa[x] = find(fa[x]);     return fa[x];   }   void uunion(int x, int y) {     int fx = find(x);     int fy = find(y);     fa[fx] = fy;   }   bool vis[100010];   void dfs(int now) {     for (int i = head[now]; i != -1; i = edge[i].next) {       if (vis[i / 2]) continue;       vis[i / 2] = true;       dfs(edge[i].v);       pp[qq++] = i ^ 1;     }   }   int main() {     int n;     scanf( %d , &n);     memset(head, -1, sizeof(head));     pos = 0;     for (int i = 0; i <= 6; i++) fa[i] = i;     for (int i = 0; i < n; i++) {       int x, y;       scanf( %d %d , &x, &y);       insert(x, y);       insert(y, x);       du[x]++;       du[y]++;       uunion(x, y);     }     bool flag = true;     for (int i = 0; i <= 6; i++)       for (int j = 0; j <= 6; j++)         if (du[i] > 0 && du[j] > 0 && find(i) != find(j)) flag = false;     if (!flag) {       printf( No solution n );       return 0;     }     qq = 0;     for (int i = 0; i <= 6; i++)       if (du[i] & 1) pp[qq++] = i;     if (qq > 2) {       printf( No solution n );       return 0;     }     for (int i = 0; i <= 6; i++)       if (du[i] != 0) pp[qq++] = i;     int begin = pp[0];     qq = 0;     memset(vis, false, sizeof(vis));     dfs(begin);     for (int i = 0; i < qq; i++) {       printf( %d  , pp[i] / 2 + 1);       if (pp[i] & 1)         printf( - );       else         printf( + );       printf(  n );     }     return 0;   }   