fork download
  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<iostream>
  6. #include<fstream>
  7. #include<map>
  8. #include<ctime>
  9. #include<set>
  10. #include<queue>
  11. #include<cmath>
  12. #include<vector>
  13. #include<bitset>
  14. #include<functional>
  15. #define x first
  16. #define y second
  17. #define mp make_pair
  18. #define pb push_back
  19. #define REP(i,l,r) for((i)=(l);(i)<=(r);++(i))
  20. #define REP2(i,l,r) for((i)=(l);(i)!=(r);++(i))
  21. using namespace std;
  22.  
  23. typedef long long LL;
  24. typedef double ld;
  25.  
  26. const int MAX=1000+10;
  27.  
  28. int n;
  29. string a;
  30. vector<short> ne[MAX][10];
  31.  
  32. int main()
  33. {
  34. int t,i,j;
  35. scanf("%d",&n);
  36. REP(i,1,n)
  37. {
  38. cin>>t>>a;
  39. REP2(t,0,10)
  40. ne[i][t]=vector<short>(a.size(),-1);
  41. for(j=a.size()-1;j>=0;--j)
  42. {
  43. if(j!=(int)a.size()-1)
  44. REP2(t,0,10)
  45. ne[i][t][j]=ne[i][t][j+1];
  46. ne[i][a[j]-'0'][j]=j;
  47. }
  48. }
  49. int ans=0;
  50. REP2(i,0,10000)
  51. {
  52. int a[10],top=0,u=i;
  53. for(j=0;j<4;++j,u/=10)
  54. if(top==0 || u%10!=a[top-1])
  55. a[top++]=u%10;
  56. reverse(a,a+top);
  57. int flag=1;
  58. REP(j,1,n)
  59. {
  60. int u=0;
  61. REP2(t,0,top)
  62. {
  63. u=ne[j][a[t]][u];
  64. if(u==-1)
  65. {
  66. flag=0;
  67. break;
  68. }
  69. }
  70. if(flag==0)
  71. break;
  72. }
  73. ans+=flag;
  74. }
  75. cout<<ans<<endl;
  76. return 0;
  77. }
  78.  
Success #stdin #stdout 0s 3552KB
stdin
2
3 123
3 234
stdout
5