/**********************************************************************************/
/* Problem: b017 "B.家長會問題" from 2007 校內初選 */
/* Language: C++ */
/* Result: NA (18 / 27) on ZeroJudge */
/* Author: ForTest at 2014-03-25 13:46:24 */
/**********************************************************************************/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <map>
#include <queue>
#include <sstream>
using namespace std;
#define F(a,b) for(int a=0;a<b;++a)
typedef long long LL;
const int mv=1000;int cv;
int n,m;
int v[mv],scc[mv];
vector<int>e[mv],be[mv],topo,ans;
int Not(int a){return -a;}
void Add(int a,int b){
e[a].push_back(b);
be[b].push_back(a);
}
void Dfs(vector<int> *E,int x,int tag = -1){
if(v[x])return;
v[x] = 1; scc[x] = tag;
F(i,E[x].size())
Dfs(E, E[x][i], tag);
if(E == e)
topo.push_back(x);
}
void Kos(){
memset(v,0,sizeof v);
for(int i=n+1;i<cv;++i) Dfs(e,i);
for(int i=0;i<n;++i) Dfs(e,i);
memset(v,0,sizeof v);
int cnt = 0;
for(int i=topo.size()-1;i>=0;--i)
Dfs(be,topo[i],cnt++);
}
bool Output(){
for(int i=1+n;i<cv;++i) if(scc[i] == scc[n*2-i]){
puts("0"); return 0;}
printf("%d\n",n);
for(int i=1+n;i<cv;++i)
printf( (scc[i] > scc[n*2-i]) ?
"+" : "-");
puts("");
return 1;
}
int main(){
scanf("%d%d",&n,&m);
cv = n*2 + 1;
F(i,m){
int a,b;
scanf("%d%d",&a,&b);
Add(Not(a)+n,b+n);
Add(Not(b)+n,a+n);
}
Kos();
Output();
return 0;
}
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAKLyogIFByb2JsZW06IGIwMTcgIkIu5a626ZW35pyD5ZWP6aGMIiBmcm9tIDIwMDcg5qCh5YWn5Yid6YG4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAKLyogIExhbmd1YWdlOiBDKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAKLyogIFJlc3VsdDogTkEgKDE4IC8gMjcpIG9uIFplcm9KdWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAKLyogIEF1dGhvcjogRm9yVGVzdCBhdCAyMDE0LTAzLTI1IDEzOjQ2OjI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovICAKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAKICAKI2luY2x1ZGUgPGlvc3RyZWFtPiAgCiNpbmNsdWRlIDxjc3RkaW8+ICAKI2luY2x1ZGUgPGNzdHJpbmc+ICAKI2luY2x1ZGUgPHZlY3Rvcj4gIAojaW5jbHVkZSA8YWxnb3JpdGhtPiAgCiNpbmNsdWRlIDxtYXA+ICAKI2luY2x1ZGUgPHF1ZXVlPiAgCiNpbmNsdWRlIDxzc3RyZWFtPiAgCiAgCnVzaW5nIG5hbWVzcGFjZSBzdGQ7ICAKICAKI2RlZmluZSBGKGEsYikgZm9yKGludCBhPTA7YTxiOysrYSkgIAp0eXBlZGVmIGxvbmcgbG9uZyBMTDsgIAogIApjb25zdCBpbnQgbXY9MTAwMDtpbnQgY3Y7ICAKaW50IG4sbTsgIAppbnQgdlttdl0sc2NjW212XTsgIAp2ZWN0b3I8aW50PmVbbXZdLGJlW212XSx0b3BvLGFuczsgIAogIAppbnQgTm90KGludCBhKXtyZXR1cm4gLWE7fSAgCnZvaWQgQWRkKGludCBhLGludCBiKXsgIAogICAgZVthXS5wdXNoX2JhY2soYik7ICAKICAgIGJlW2JdLnB1c2hfYmFjayhhKTsgIAp9ICAKICAKdm9pZCBEZnModmVjdG9yPGludD4gKkUsaW50IHgsaW50IHRhZyA9IC0xKXsgIAogICAgaWYodlt4XSlyZXR1cm47ICAKICAgIHZbeF0gPSAxOyAgIHNjY1t4XSA9IHRhZzsgIAogICAgRihpLEVbeF0uc2l6ZSgpKSAgCiAgICAgICAgRGZzKEUsIEVbeF1baV0sIHRhZyk7ICAKICAgIGlmKEUgPT0gZSkgIAogICAgICAgIHRvcG8ucHVzaF9iYWNrKHgpOyAgCn0gIAp2b2lkIEtvcygpeyAgCiAgICBtZW1zZXQodiwwLHNpemVvZiB2KTsgIAogICAgZm9yKGludCBpPW4rMTtpPGN2OysraSkgRGZzKGUsaSk7ICAKICAgIGZvcihpbnQgaT0wO2k8bjsrK2kpIERmcyhlLGkpOyAgCiAgICBtZW1zZXQodiwwLHNpemVvZiB2KTsgIAogICAgaW50IGNudCA9IDA7ICAKICAgIGZvcihpbnQgaT10b3BvLnNpemUoKS0xO2k+PTA7LS1pKSAgCiAgICAgICAgRGZzKGJlLHRvcG9baV0sY250KyspOyAgCn0gIAogIApib29sIE91dHB1dCgpeyAgCiAgICBmb3IoaW50IGk9MStuO2k8Y3Y7KytpKSBpZihzY2NbaV0gPT0gc2NjW24qMi1pXSl7ICAKICAgICAgICBwdXRzKCIwIik7IHJldHVybiAwO30gIAogICAgcHJpbnRmKCIlZFxuIixuKTsgIAogICAgZm9yKGludCBpPTErbjtpPGN2OysraSkgIAogICAgICAgIHByaW50ZiggKHNjY1tpXSA+IHNjY1tuKjItaV0pID8gIAogICAgICAgICAgICAgICAgIisiIDogIi0iKTsgIAogICAgcHV0cygiIik7ICAKICAgIHJldHVybiAxOyAgCn0gIAogIAppbnQgbWFpbigpeyAgCiAgICBzY2FuZigiJWQlZCIsJm4sJm0pOyAgCiAgICBjdiA9IG4qMiArIDE7ICAKICAgIEYoaSxtKXsgIAogICAgICAgIGludCBhLGI7ICAKICAgICAgICBzY2FuZigiJWQlZCIsJmEsJmIpOyAgCiAgICAgICAgQWRkKE5vdChhKStuLGIrbik7ICAKICAgICAgICBBZGQoTm90KGIpK24sYStuKTsgIAogICAgfSAgCiAgICBLb3MoKTsgIAogICAgT3V0cHV0KCk7ICAKICAgIHJldHVybiAwOyAgCn0gIA==