#include <bits/stdc++.h>
using namespace std;
//~ #define int int64_t
#define pb push_back
#define fr first
#define sc second
#define all(x) x.begin(),x.end()
#define sp << " " <<
#define N 200000
typedef pair<int,int> pii;
struct Item{
int color,next[2],p[2];
Item(int x,int c,int n){
color=c;
p[0]=x;p[1]=(x+1)%n;
next[0]=(x+n-1)%n;
next[1]=(x+1)%n;
}
};
void solve(){
int n;string s;
cin >> n >> s;
vector<Item> a;
int cnt[5]={0,0,0,0,0};
for(int i=0;i<n;i++){
cnt[s[i]-'0']++;
a.pb(Item(i,s[i]-'0',n));
}
if(cnt[1]%2!=cnt[2]%2 || cnt[2]%2!=cnt[3]%2 || max(cnt[1],max(cnt[2],cnt[3]))==cnt[1]+cnt[2]+cnt[3]){
cout << "NE\n";
return;
}
vector<tuple<int,int,int>> ans;
int it=0,yon=1;
while((int)ans.size()<n-3){
if(a[it].color==a[a[it].next[yon]].color){
int tmp=a[it].color;
while(a[it].color==tmp)
it=a[it].next[yon];
yon^=1;
}
int curColor=a[it].color,nextColor=a[a[it].next[yon]].color;
if(cnt[curColor]==1 && cnt[nextColor]==1){
it=a[it].next[yon];
curColor=a[it].color;
nextColor=a[a[it].next[yon]].color;
}
cnt[curColor]--;cnt[nextColor]--;cnt[6-curColor-nextColor]++;
ans.pb({a[it].p[yon^1],a[a[it].next[yon]].p[yon],6-curColor-nextColor});
a[it].p[yon]=a[a[it].next[yon]].p[yon];
a[a[a[it].next[yon]].next[yon]].next[yon^1]=it;
a[it].next[yon]=a[a[it].next[yon]].next[yon];
a[it].color=6-curColor-nextColor;
}
cout << "DA\n";
for(auto [i,j,c]:ans)
cout << i+1 sp j+1 sp c << "\n";
}
int32_t main(){
//~ freopen("radio.in","r",stdin);
//~ freopen("radio.out","w",stdout);
cout << fixed << setprecision(0);
ios_base::sync_with_stdio(false);
cin.tie(NULL);cout.tie(NULL);
int test=1;
//~ cin >> test;
while(test--) solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |