• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            #include <stdio.h>
            #include 
            <stdlib.h>
            #include 
            <string.h>

            #define MAX  500001

            struct Trie
            {
                
            int   num;
                Trie
            * next[26];    
            } a[
            5000000];

            Trie  root;
            int   location, id;
            int   set[MAX];

            void initial()
            {
                root.num
            = -1;
                
                memset( root.next, 
            0sizeof(root.next) );
                
                location
            = 0, id= 1;
            }

            void insert( char* s )
            {
                Trie
            * r= &root;
                
                
            while*s )
                {
                    
            int t= *s- 'a';    
                    
                    
            if( r->next[t]== NULL )
                    {
                        r
            ->next[t]= a+ location;
                        
                        a[location].num
            = -1;
                        memset( a[location].next, 
            0sizeof( a[location].next ) );
                        
                        location
            ++;
                    }
                    
                    r
            = r->next[t];
                    s
            ++;
                }
                
                
            if( r->num== -1 ) r->num= id++;
            }

            int degree[MAX];

            int search( char* s )
            {
                Trie
            * r= &root;
                
                
            while*s )
                {
                    
            int t= *s- 'a';
                    
                    
            if( r->next[t] ) r= r->next[t];
                    
            else return -1;
                    
                    s
            ++;
                }
                
                
            return r->num;
            }

            int find( int i )
            {
                
            while( i!= set[i] ) i= set[i];
                
                
            return i;
            }

            void Union( int a, int b )
            {
                
            int ta= find(a), tb= find(b);
                
                
            set[ta]= tb;
            }

            int main()
            {
                
            char s1[15],s2[15];
                
                initial();
                
            forint i= 0; i< MAX; ++i ) { degree[i]= 0set[i]= i; }
                
                
            while( scanf("%s%s",s1, s2)!= EOF )
                {
                    insert(s1); insert(s2);
                    
                    
            int a= search(s1), b= search(s2);
                    
                    degree[a]
            ++, degree[b]++;
                    Union(a,b);
                }
                
                
            int m= 0;
                
            forint i= 1; i< id; ++i )
                
            if( degree[i]& 1 ) m++;
                
                
            int t= find(1);
                
                
            forint i= 2; i< id; ++i )
                
            if( find(i)!= t )
                {
                    m
            = -1;
                    
            break;
                }
                
                
            if( m== 0  || m== 2 ) puts("Possible");
                
            else                  puts("Impossible");
                
                
            return 0;
            }





            #include <stdio.h>
            #include 
            <stdlib.h>
            #include 
            <string.h>
            #include 
            <vector>

            #define MAX  500001

            struct Node
            {
                
            int value, ID;
                Node(){}
                Node( 
            int a, int b ): value(a), ID(b) {}
            };

            int   set[MAX], id= 0;
            std::vector
            <Node> dict[MAX<<1];
            int   degree[MAX];

            int find( int i )
            {
                
            while( i!= set[i] ) i= set[i];
                
                
            return i;
            }

            void Union( int a, int b )
            {
                
            int ta= find(a), tb= find(b);
                
                
            set[ta]= tb;
            }

            int getvalue( char* s )
            {
                __int64 t
            = 0;
                
            while*s )
                {
                    t
            = t* 128+ *s- 'a';
                    s
            ++;
                }
                
                
            return t% 1000001;
            }

            int main()
            {
                
            char s1[15],s2[15];
                
                
            forint i= 0; i< MAX; ++i ) { degree[i]= 0set[i]= i; }
                
                
            while( scanf("%s%s",s1, s2)!= EOF )
                {
                    
            int t= getvalue(s1),a,b;
                    
                    
            if( dict[t].size()== 0 ) 
                    {
                        dict[t].push_back( Node(t,
            ++id) );
                        a
            = id;
                    }
                    
            else if( dict[t].size()== 1 )
                        a
            = dict[t][0].ID;
                    
            else 
                    {
                        
            bool ok= false;
                        
                        
            for( size_t i= 0; i< dict[t].size(); ++i )
                        
            if( dict[t][i].value== t )
                        {
                            a
            = dict[t][i].ID;
                            ok
            = true;
                            
            break;
                        }
                        
                        
            if!ok ) { dict[t].push_back( Node(t,++id) ); a= id; }
                    }
                    
                    t
            = getvalue(s2);
                    
            if( dict[t].size()== 0 ) 
                    {
                        dict[t].push_back( Node(t,
            ++id) );
                        b
            = id;
                    }
                    
            else if( dict[t].size()== 1 )
                        b
            = dict[t][0].ID;
                    
            else 
                    {
                        
            bool ok= false;
                        
                        
            for( size_t i= 0; i< dict[t].size(); ++i )
                        
            if( dict[t][i].value== t )
                        {
                            b
            = dict[t][i].ID;
                            ok
            = true;
                            
            break;
                        }
                        
                        
            if!ok ) { dict[t].push_back( Node(t,++id) ); b= id; }
                    }
                    
                    degree[a]
            ++, degree[b]++;
                    Union(a,b);
                }
                
                
            int m= 0;
                
            forint i= 1; i<= id; ++i )
                
            if( degree[i]& 1 ) m++;
                
                
            int t= find(1);
                
                
            forint i= 2; i<= id; ++i )
                
            if( find(i)!= t )
                {
                    m
            = -1;
                    
            break;
                }
                
                
            if( m== 0  || m== 2 ) puts("Possible");
                
            else                  puts("Impossible");
                
                
            return 0;
            }
            posted on 2008-11-25 10:31 Darren 閱讀(204) 評論(0)  編輯 收藏 引用
            久久福利资源国产精品999| 久久久久久久久久久久久久| 亚洲AV日韩精品久久久久久| 久久水蜜桃亚洲av无码精品麻豆 | 一本久久a久久精品综合夜夜| 国产99精品久久| 亚洲欧洲久久av| 久久精品国产亚洲AV麻豆网站| 青草影院天堂男人久久| 伊人久久大香线蕉综合热线| 国产午夜福利精品久久2021| 青青青青久久精品国产h久久精品五福影院1421 | 久久久久国产视频电影| 日韩精品久久无码中文字幕| 国产精品成人久久久久三级午夜电影| 一97日本道伊人久久综合影院| 精品人妻久久久久久888| 久久人人青草97香蕉| 亚洲国产精品久久| 99精品久久精品一区二区| 久久久无码精品午夜| 91精品国产综合久久精品| 一本一本久久A久久综合精品| 99久久国产免费福利| 99热成人精品热久久669| 亚洲中文精品久久久久久不卡| 久久久无码精品亚洲日韩软件| 久久精品国产半推半就| 国产精品免费看久久久| 人妻精品久久无码专区精东影业| 亚洲精品美女久久久久99小说| 成人精品一区二区久久久| 久久免费国产精品一区二区| 精品蜜臀久久久久99网站| 久久精品无码专区免费青青| 久久亚洲精品中文字幕| 久久久精品人妻一区二区三区蜜桃 | 欧美一级久久久久久久大片| 女同久久| 久久精品亚洲AV久久久无码| 亚洲va久久久噜噜噜久久狠狠|