fork download
  1.  
  2. //#define Bharatvarsh
  3.  
  4. #ifndef Bharatvarsh
  5. #include <bits/stdc++.h>
  6. #else
  7. #include "total.h"
  8. #endif
  9. #define fori(n) for(long long i=0;i<n;i++)
  10. #define forr(i,x,y) for(long long i=x;i<y;i++)
  11. #define forj(n) for(long long j=0;j<n;j++)
  12. #define ll long long
  13. #define d7 1000000007
  14. #define en cout<<"\n";
  15.  
  16. using namespace std;
  17.  
  18. ll x=-1,kk=-1;
  19. bool jpo=false;
  20. void dfs(ll s, vector<bool> &v, vector<ll> &pr, vector<ll> adj[]){
  21. if(v[s]) return;
  22. v[s]=true;
  23. //cout<<s+1<<" ";
  24. for(auto u: adj[s]){
  25. if(!v[u]){
  26. pr[u]=s;
  27. //cout<<u<<" ";
  28. dfs(u,v,pr,adj);}
  29. else{
  30. if(!jpo&&pr[s]!=u){jpo=true;x=u;kk=s;}
  31. }
  32. }
  33. }
  34.  
  35. bool isPrime(long long k){
  36. if(k<=1){return false;}
  37. if(k==2){return true;}
  38. if(k%2==0){return false;}
  39. long long i = 3;
  40. while (i*i <= k) {if (k % i == 0) {return false;}i += 2;}
  41. return true;
  42. }
  43.  
  44. ll binomialCoeff(ll n, ll k){
  45. ll C[n + 1][k + 1];ll i, j;
  46. for (i = 0; i <= n; i++){
  47. for (j = 0; j <= min(i, k); j++){
  48. if (j == 0 || j == i){C[i][j] = 1;}
  49. else{C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]);}}}
  50. return C[n][k];
  51. }
  52. void bfs(vector<ll> &dis, vector<ll> adj[], ll s, vector<ll> &parent){
  53. dis[s]=0;
  54. //parent[s]=-1;
  55. queue<ll> q;
  56. q.push(s);
  57. while(!q.empty()){
  58. ll z=q.front();
  59. //cout<<z<<" ";
  60. q.pop();
  61. for(auto v:adj[z]){
  62. if(dis[v]==0){
  63. q.push(v);
  64. dis[v]=dis[z]+1;
  65. parent[v]=z;
  66. }
  67. }
  68. }
  69. }
  70.  
  71. ll modexp(ll x, ll n,ll m){
  72. if(n==0) return 1%m;
  73. ll u=modexp(x,n/2,m);
  74. u=(u*u)%m;
  75. if(n%2==1) u=(u*x)%m;
  76. return u;
  77. }
  78.  
  79. ll modinv(ll x, ll mod) { return modexp(x, mod - 2, mod); }
  80. const int Nx=1e6+5;
  81. ll fact[Nx];
  82. void factorial(){fact[0]=1;
  83. for(int i=1;i<Nx;i++)
  84. {
  85. fact[i]=(fact[i-1]*i)%d7;
  86. }
  87. return ;}
  88. ll binomial(ll a,ll b,ll mod){
  89. return ((fact[a]*modinv(fact[b],mod))%mod*modinv(fact[a-b],mod))%mod;}
  90.  
  91. ll gcd(ll a, ll b){
  92. if(b==0) return a;
  93. return gcd(b, a%b);
  94. }
  95.  
  96. tuple<ll,ll,ll,ll> expA(tuple<ll,ll,ll,ll> v, ll n){
  97. if(n==0){return {1,0,1,0};}
  98. if(n==1){return v;}
  99. ll x1,y1,z1,w1;
  100. ll x2,y2,z2,w2;
  101. tie(x1,y1,z1,w1) = expA(v, n/2);
  102. x2=(x1*x1+y1*z1)%d7;
  103. y2=(x1*y1+y1*w1)%d7;
  104. z2=(z1*x1+w1*z1)%d7;
  105. w2=(z1*y1+w1*w1)%d7;
  106. if(n%2==0){
  107. return {x2,y2,z2,w2};
  108. }
  109. else{
  110. return {x2+z2,y2+w2,x2,y2};
  111. }
  112. }
  113.  
  114. //ll st[200010][30];
  115. //ll loge2[200001];
  116. //void logify(){
  117. //loge2[1] = 0;
  118. //for (ll i = 2; i <= 200001; i++)
  119. // loge2[i] = loge2[i/2] + 1;
  120. //}
  121.  
  122. //unordered_map<ll,ll> mp;
  123.  
  124. vector<ll> primes;
  125.  
  126. vector<ll> dp(100,0);
  127.  
  128. void solution(){
  129.  
  130.  
  131. string s,t;
  132. getline(cin,s);
  133. getline(cin,t);
  134. set<char> yu;
  135.  
  136. for(ll i=0;i<s.size();i++){
  137. yu.insert(s[i]);
  138. }
  139. bool sahihai=true;
  140.  
  141. for(ll i=0;i<t.size();i++){
  142. auto hh=yu.find(t[i]);
  143. if(hh==yu.end()){
  144. sahihai=false;break;
  145. }
  146. }
  147.  
  148. if(!sahihai){cout<<"No String";return;}
  149.  
  150. set<char> s1, s2;
  151.  
  152. for(ll i=0;i<t.size();i++){
  153. s1.insert(t[i]);
  154. s2.insert(t[i]);
  155. }
  156. ll n=s.size();
  157.  
  158. map<char,ll> mp;
  159.  
  160. vector<string> ans;
  161.  
  162. for(ll i=0,j=0;j<=n;){
  163.  
  164. for(ll hh=i;hh<j;hh++){
  165. s1.erase(s[hh]);
  166. }
  167.  
  168. while(!s1.empty() && j<n){
  169. s1.erase(s[j]);j++;
  170. }
  171.  
  172. if(!s1.empty()) break;
  173.  
  174. for(ll h=i;h<j;h++){
  175. mp[s[h]]++;
  176. }
  177.  
  178. while(i<j){
  179. if(s2.find(s[i])!=s2.end()){
  180. if(mp[s[i]]>1){
  181. mp[s[i]]--;
  182. }else{
  183. break;
  184. }
  185. }
  186. i++;
  187. }
  188. string ui;
  189. for(ll hh=i;hh<j;hh++){
  190. ui.push_back(s[hh]);
  191. }
  192. //cout<<i<<" "<<j<<ui<<" :\n";
  193. ans.push_back(ui);
  194.  
  195. if(j<=n&&(i<j)){
  196. i++;
  197. }else{
  198. break;
  199. }
  200.  
  201. for(auto h: s2){
  202. mp[h]=0;
  203. s1.insert(h);
  204. }
  205.  
  206. }
  207.  
  208. //cout<<"Answer:\n";
  209. ll mn=ans[0].size();
  210. for(auto h: ans){
  211. mn=min((ll)h.size(),mn);
  212. }
  213. for(auto h: ans){
  214. if(mn==h.size()){
  215. cout<<h<<endl;break;
  216. }
  217. }
  218.  
  219.  
  220. }
  221.  
  222. int main(){
  223.  
  224. // vector<bool> f(1010,true);
  225. // primes.push_back(2);
  226. //
  227. // for(ll i=3;i<1010;i+=2){
  228. // while(i<1010&& !f[i]) i+=2;
  229. // if(i<1010 && f[i]){
  230. // primes.push_back(i);
  231. //
  232. // for(ll j=2*i;j<1010;j+=i){
  233. // f[j]=false;
  234. // }}
  235. // }
  236.  
  237.  
  238.  
  239. ll t=1;
  240. //cin>>t;
  241. while(t--){
  242. solution();
  243. }
  244.  
  245. return 0;
  246. }
Success #stdin #stdout 0s 4488KB
stdin
Standard input is empty
stdout