#include <bits/stdc++.h>
using namespace std;
vector<vector<pair<int, int> > > nond(300000);
vector<vector<int> > d(300000);
vector<pair<int, int> > neorientirani;
int main() {
  int n, m, s;
  int izbrojmin = 0, izbrojmax = 0;
  cin >> n >> m >> s;
  for (int i = 0; i < m; i++) {
    int t, a, b;
    cin >> t >> a >> b;
    a--, b--;
    if (t == 1) {
      d[a].push_back(b);
    } else {
      nond[a].push_back({b, neorientirani.size()});
      nond[b].push_back({a, neorientirani.size()});
      neorientirani.push_back({a, b});
    }
  }
  string zamalku(neorientirani.size(), '0');
  queue<int> Q;
  Q.push(s - 1);
  bool vis[n];
  memset(vis, false, n);
  vis[s - 1] = true;
  while (!Q.empty()) {
    izbrojmin++;
    int curr = Q.front();
    Q.pop();
    for (int i = 0; i < d[curr].size(); i++) {
      if (!vis[d[curr][i]]) {
        Q.push(d[curr][i]);
        vis[d[curr][i]] = true;
      }
    }
    for (int i = 0; i < nond[curr].size(); i++) {
      if (curr == neorientirani[nond[curr][i].second].first) {
        zamalku[nond[curr][i].second] = '-';
      } else {
        zamalku[nond[curr][i].second] = '+';
      }
    }
  }
  string zamnogu(neorientirani.size(), '0');
  Q.push(s - 1);
  memset(vis, false, n);
  vis[s - 1] = true;
  while (!Q.empty()) {
    izbrojmax++;
    int curr = Q.front();
    Q.pop();
    for (int i = 0; i < d[curr].size(); i++) {
      if (!vis[d[curr][i]]) {
        Q.push(d[curr][i]);
        vis[d[curr][i]] = true;
      }
    }
    for (int i = 0; i < nond[curr].size(); i++) {
      if (!vis[nond[curr][i].first]) {
        Q.push(nond[curr][i].first);
        vis[nond[curr][i].first] = true;
        if (curr == neorientirani[nond[curr][i].second].first) {
          zamnogu[nond[curr][i].second] = '+';
        } else {
          zamnogu[nond[curr][i].second] = '-';
        }
      }
    }
  }
  cout << izbrojmax << endl;
  for (int i = 0; i < zamnogu.size(); i++) {
    if (zamnogu[i] == '0') {
      cout << '+';
    } else {
      cout << zamnogu[i];
    }
  }
  cout << endl;
  cout << izbrojmin << endl;
  for (int i = 0; i < zamalku.size(); i++) {
    if (zamalku[i] == '0') {
      cout << '+';
    } else {
      cout << zamalku[i];
    }
  }
  cout << endl;
  return 0;
}
