#include <iostream>
#include <vector>
#include <bitset>
#include <queue>
#include <algorithm>
#include <cstdlib>
#include <functional>
#include <string>
typedef unsigned long long ull;
using namespace std;
int s=36,t=37,mf,f,req;
vector<int> p;
vector<vector<int> > res;
void augment(int u,int minEdge){
if(u==s){
f=minEdge;
return;
}
if(p[u]==-1)
return;
augment(p[u],min(minEdge,res[p[u]][u]));
res[p[u]][u]-=f;
res[u][p[u]]+=f;
}
int main(){
while(!cin.eof()){
res.assign(38,vector<int>(38,0));
req=0;
// for(int i=10;i<36;i++)
// res[s][i]=1000;
for(int i=0;i<10;i++)
res[i][t]=1;
mf=0;
string st;
while(getline(cin,st)){
// cout<<st.size()<<endl;
if(st.size()==0)
break;
int app=st[0]-'A'+10;
res[s][app]=st[1]-'0';
req+=st[1]-'0';
int i=3;
while(i<st.size()-1){
res[app][st[i++]-'0']=1;
}
}
while(1){
f=0;
p.assign(38,-1);
p[s]=s;
queue<int> q;
q.push(s);
while(!q.empty()){
int u=q.front();
q.pop();
if(u==t)
break;
for(int i=0;i<38;i++)
if(res[u][i]>0&&p[i]==-1)
p[i]=u,q.push(i);
}
augment(t,1000);
if(!f)
break;
mf+=f;
}
// cout<<mf<<endl;
if(mf<req)
cout<<'!'<<endl;
else{
vector<int> sol(10,-1);
for(int comp=0;comp<10;comp++){
for(int app=10;app<36;app++){
if(res[comp][app]){
sol[comp]=app-10;
break;
}
}
}
for(int i=0;i<10;i++)
if(sol[i]!=-1)
cout<<char(sol[i]+'A');
else cout<<'_';
cout<<endl;
}
}
}
#include <vector>
#include <bitset>
#include <queue>
#include <algorithm>
#include <cstdlib>
#include <functional>
#include <string>
typedef unsigned long long ull;
using namespace std;
int s=36,t=37,mf,f,req;
vector<int> p;
vector<vector<int> > res;
void augment(int u,int minEdge){
if(u==s){
f=minEdge;
return;
}
if(p[u]==-1)
return;
augment(p[u],min(minEdge,res[p[u]][u]));
res[p[u]][u]-=f;
res[u][p[u]]+=f;
}
int main(){
while(!cin.eof()){
res.assign(38,vector<int>(38,0));
req=0;
// for(int i=10;i<36;i++)
// res[s][i]=1000;
for(int i=0;i<10;i++)
res[i][t]=1;
mf=0;
string st;
while(getline(cin,st)){
// cout<<st.size()<<endl;
if(st.size()==0)
break;
int app=st[0]-'A'+10;
res[s][app]=st[1]-'0';
req+=st[1]-'0';
int i=3;
while(i<st.size()-1){
res[app][st[i++]-'0']=1;
}
}
while(1){
f=0;
p.assign(38,-1);
p[s]=s;
queue<int> q;
q.push(s);
while(!q.empty()){
int u=q.front();
q.pop();
if(u==t)
break;
for(int i=0;i<38;i++)
if(res[u][i]>0&&p[i]==-1)
p[i]=u,q.push(i);
}
augment(t,1000);
if(!f)
break;
mf+=f;
}
// cout<<mf<<endl;
if(mf<req)
cout<<'!'<<endl;
else{
vector<int> sol(10,-1);
for(int comp=0;comp<10;comp++){
for(int app=10;app<36;app++){
if(res[comp][app]){
sol[comp]=app-10;
break;
}
}
}
for(int i=0;i<10;i++)
if(sol[i]!=-1)
cout<<char(sol[i]+'A');
else cout<<'_';
cout<<endl;
}
}
}
Comments
Post a Comment