• <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)  編輯 收藏 引用
            久久婷婷是五月综合色狠狠| AV狠狠色丁香婷婷综合久久| 亚洲日韩欧美一区久久久久我| 久久久久九国产精品| 亚洲精品高清一二区久久| 亚洲熟妇无码另类久久久| 久久国产高清字幕中文| 久久男人中文字幕资源站| 少妇人妻88久久中文字幕| 精品一久久香蕉国产线看播放| 精品久久人人爽天天玩人人妻| 99久久国产综合精品网成人影院| 一97日本道伊人久久综合影院| 国内精品久久久久影院薰衣草| 久久精品这里热有精品| 一本久久a久久精品vr综合| 久久久久久久综合综合狠狠| 久久久久久九九99精品| 精品久久久久久久国产潘金莲 | 国内精品久久久久国产盗摄| 久久人人爽人人爽人人片AV不| 久久久久女教师免费一区| 久久精品这里热有精品| 99国产精品久久久久久久成人热| 久久久久国产精品人妻| 久久人妻少妇嫩草AV无码蜜桃 | 99久久精品免费看国产一区二区三区| 天天爽天天爽天天片a久久网| 国产成年无码久久久久毛片| 亚洲中文字幕无码久久2020| 亚洲日本va午夜中文字幕久久| 欧美激情精品久久久久久久| 久久97久久97精品免视看| 91精品国产91久久久久久青草| 蜜臀av性久久久久蜜臀aⅴ| 久久久亚洲欧洲日产国码二区| 亚洲精品高清国产一线久久| 亚洲AV乱码久久精品蜜桃| 久久66热人妻偷产精品9| 久久亚洲国产午夜精品理论片| 91亚洲国产成人久久精品|