1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <iostream>
#include <vector>
using namespace std;
const int N=2001;
vector<pair<int,int>>v[N];
int minim[N];
int minim2[N];
bool visi[N];
void dfs(int x){
    visi[x]=1;
    for(auto i:v[x]){
        if(minim[i.first]==0&&i.first!=1){
            minim[i.first]=minim[x]+i.second;
        }
        minim[i.first]=min(minim[x]+i.second,minim[i.first]);
        if(visi[i.first]==0){
            dfs(i.first);
        }
    }
}
void porownaj(int x){
    visi[x]=1;
    for(auto i:v[x]){
       //     cout<<"AB "<<i.first<<" "<<minim[i.first]<<"\n";
        if(minim[i.first]==0&&i.first!=1){
            minim[i.first]=minim[x]+i.second;
        }
        minim[i.first]=min(minim[x]+i.second,minim[i.first]);
        if(minim2[x]!=0&&x!=1){
            minim[i.first]=min(minim2[x]+i.second,minim[i.first]);
        }

        if(visi[i.first]==0){
            porownaj(i.first);
        }
       //  cout<<"AB2 "<<i.first<<" "<<minim[i.first]<<"\n";
    }
}
void wczytaj(int n){
    for(int i=2;i<=n;i++){
            int x=0;
            bool b;
            int potega=1;
            for(int j=0;j<9;j++){
                cout<<"?\n";
                cout.flush();
                char c;
                cin>>c;
                cin>>b;
                if(b==1){
                    x+=potega;
                }
                potega*=2;
            }
           // cout<<x<<"\n";
            minim2[i]=x;
            if(minim2[i]!=0){
                minim[i]=min(minim[i],minim2[i]);
            }
            if(minim[i]==0){
                minim[i]=minim2[i];
            }
        }

}
void wypisz(int n){
    for(int i=2;i<=n;i++){
            int x=minim[i];
           // cout<<x<<" "<<i<<"\n";
            bool b;
            for(int j=0;j<9;j++){
                if(x%2==0){
                    b=0;
                }else{
                    b=1;
                }
                x/=2;
                cout<<"+ "<<b<<"\n";
                cout.flush();
            }

        }

}
void czysc(int n){
    for(int i=1;i<=n;i++){
        visi[i]=0;
    }
}
void Porownaj(int n){
    czysc(n);
    porownaj(1);
    for(int i=2;i<=n;i++){
        if(visi[i]==0&&minim[i]!=0){
           porownaj(i);
        }
    }
}
int main()
{
    string s;
    cin>>s;
    int n,a;
    cin>>n>>a;
    for(int i=0;i<a;i++){
        int x,y,z;
        cin>>x>>y>>z;
        v[x].push_back({y,z});
        v[y].push_back({x,z});
    }
    dfs(1);
    if(s=="Algosia"){
        wczytaj(n);
        Porownaj(n);
        wypisz(n);
        wczytaj(n);
        for(int i=1;i<=n;i++){
            minim2[i]=0;
        }
        Porownaj(n);
        cout<<"!\n";
        for(int i=1;i<=n;i++){
            cout<<minim[i]<<" ";
        }
        cout.flush();
    }
    if(s=="Bajtek"){
        wypisz(n);
        wczytaj(n);
        Porownaj(n);
        wypisz(n);
    }
    return 0;
}