#include "paint.h"
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
using namespace std;
string solve_puzzle(string s, vector <int> c){
    s+="_";
    int k=c.size();
    int n=s.length();
    vector < vector <pair <vector <int>, pair <int, int> > > > DP;
    DP.resize(n);
    if(s[0]!='_'){
        DP[0].pb({{1}, {1, 0}});
    }
    if(s[0]!='X'){
        DP[0].pb({{0}, {0, 0}});
    }
    for(int i=1; i<n; ++i){
        for(int j=0; j<DP[i-1].size(); ++j){
            if(DP[i-1][j].se.se==k){
                if(s[i]!='X'){
                    DP[i].pb(DP[i-1][j]);
                    DP[i][DP[i].size()-1].fi.pb(0);
                }
            }
            else if(DP[i-1][j].se.fi==c[DP[i-1][j].se.se]){
                if(s[i]!='X'){
                    DP[i].pb({DP[i-1][j].fi, {0, DP[i-1][j].se.se+1}});
                    DP[i][DP[i].size()-1].fi.pb(0);
                }
            }
            else if(DP[i-1][j].se.fi==0){
                if(s[i]!='_'){
                    DP[i].pb({DP[i-1][j].fi, {1, DP[i-1][j].se.se}});
                    DP[i][DP[i].size()-1].fi.pb(1);
                }
                if(s[i]!='X'){
                    DP[i].pb(DP[i-1][j]);
                    DP[i][DP[i].size()-1].fi.pb(0);
                }
            }
            else{
                if(s[i]!='_'){
                    DP[i].pb(DP[i-1][j]);
                    DP[i][DP[i].size()-1].fi.pb(1);
                    ++DP[i][DP[i].size()-1].se.fi;
                }
            }
        }
        DP[i-1].resize(0);
    }
    string fr="";
    vector <vector <int> > TDP;
    for(int i=0; i<DP[n-1].size(); ++i){
        if(DP[n-1][i].se.se==k && DP[n-1][i].se.fi==0){
                
            TDP.pb(DP[n-1][i].fi);
        }
    }
    if(TDP.size()==0){
        return fr;
    }
    for(int j=0; j<n-1; ++j){
        int as=TDP[0][j];
        for(int i=0; i<TDP.size(); ++i){
            if(as!=TDP[i][j]){
                fr+='?';
                break;
            }
            if(i==TDP.size()-1){
                if(TDP[i][j]==0){
                    fr+='_';
                    break;
                }
                fr+='X';
                break;
            }
        }
    }
    return fr;
}
Compilation message (stderr)
paint.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
paint_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |