#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
// Cho một bộ bài 52 lá thông thường. Các lá bài được xác định bởi số và chất. Số được đánh là 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A. Chất được đánh là P, C, T, H. Ví dụ quân Át bích là AP, quân 7 tép là 7C. An và Bình biểu diễn một trò ảo thuật như sau:
// An lấy ra một bộ bài, bảo khán giả chọn 6 lá tùy ý rồi đưa lại cho An (không cho Bình biết)
// An đưa cho Bình 5 lá và giữ lại một lá (không cho Bình biết lá này)
// Bình đoán ra lá bài An đang giấu trước sự trầm trồ của khán giả
// Dĩ nhiên họ là một cặp diễn ăn ý, trước đó họ đã thống nhất chiến thuật với nhau. Nhiệm vụ của bạn là giả lập lại trò ảo thuật này, bằng cách viết hai class An và Binh:
// class An gồm:
// Hàm khởi tạo mặc định.
// Hàm vector<string> pick(vector<string> X) để chọn các lá bài để đưa cho Bình: Nhận đầu vào X
// là 6 lá bài mà khán giả chọn, trả ra Y
// là danh sách các lá bài sẽ đưa cho Bình.
// class Binh gồm:
// Hàm khởi tạo mặc định.
// Hàm string guess(vector<string> Y) để đoán lá bài còn lại mà An đang giữ: Nhận đầu vào Y
// là kết quả trả về của hàm pick nói trên, trả ra một lá bài là lá mà An đang giữ.
// Các hàm trên cần để public. Sinh viên được phép viết thêm các hàm và biến khác nếu cần, tuỳ thuộc vào thiết kế của mình. Khi chấm bài, trình chấm sẽ giả lập buổi biểu diễn và sử dụng các hàm do sinh viên viết. Việc thực hiện trò ảo thuật này như thế nào là do sinh viên tự thiết kế, trình chấm chỉ bảo đảm sẽ đưa chính xác vector Y trả về của hàm pick cho hàm guess, ngoài ra sẽ không can thiệp gì vào mô hình của sinh viên.
using namespace std;
int getValue( string card)
{
card.pop_back ( ) ;
if ( card == "A" ) return 11 ;
if ( card == "J" ) return 12 ;
if ( card == "K" ) return 13 ;
if ( card == "Q" ) return 14 ;
return stoi( card) ;
}
char getSuit( string card)
{
return card.back ( ) ;
}
vector < string> reverseCard( vector< string> X)
{
for ( int i = 0 ; i < X.size ( ) ; i++ )
{
reverse( X[ i] .begin ( ) , X[ i] .end ( ) ) ;
}
return X;
}
class An
{
public :
An( ) ;
vector< string> pick( vector < string> X) ;
} ;
An:: An ( ) { }
vector< string> An:: pick ( vector< string> X)
{
int pos = 0 ;
vector< string> res;
vector< string> revX = reverseCard( X) ;
sort( revX.begin ( ) , revX.end ( ) ) ;
for ( int i = 0 ; i < revX.size ( ) - 1 ; i++ )
{
if ( revX[ i] [ 0 ] ! = revX[ i + 1 ] [ 0 ] ) continue ;
pos = i;
break ;
}
string suitCard = revX[ pos] ;
reverse( suitCard.begin ( ) , suitCard.end ( ) ) ;
string pickCard = revX[ pos + 1 ] ;
reverse( pickCard.begin ( ) , pickCard.end ( ) ) ;
int distance = getValue( pickCard) - getValue( suitCard) ;
revX.erase ( revX.begin ( ) + pos, revX.begin ( ) + pos + 2 ) ;
if ( distance == 2 )
{
swap( revX[ 2 ] , revX[ 3 ] ) ;
}
else if ( distance == 3 )
{
swap( revX[ 1 ] , revX[ 3 ] ) ;
}
else if ( distance == 4 )
{
swap( revX[ 1 ] , revX[ 3 ] ) ;
swap( revX[ 2 ] , revX[ 3 ] ) ;
}
else if ( distance == 5 )
{
swap( revX[ 0 ] , revX[ 1 ] ) ;
}
else if ( distance == 6 )
{
swap( revX[ 0 ] , revX[ 1 ] ) ;
swap( revX[ 2 ] , revX[ 3 ] ) ;
}
else if ( distance == 7 )
{
swap( revX[ 0 ] , revX[ 1 ] ) ;
swap( revX[ 1 ] , revX[ 3 ] ) ;
}
else if ( distance == 8 )
{
swap( revX[ 0 ] , revX[ 1 ] ) ;
swap( revX[ 1 ] , revX[ 3 ] ) ;
swap( revX[ 2 ] , revX[ 3 ] ) ;
}
else if ( distance == 9 )
{
swap( revX[ 0 ] , revX[ 2 ] ) ;
swap( revX[ 1 ] , revX[ 2 ] ) ;
}
else if ( distance == 10 )
{
swap( revX[ 0 ] , revX[ 2 ] ) ;
swap( revX[ 1 ] , revX[ 2 ] ) ;
swap( revX[ 2 ] , revX[ 3 ] ) ;
}
else if ( distance == 11 )
{
swap( revX[ 0 ] , revX[ 2 ] ) ;
swap( revX[ 1 ] , revX[ 2 ] ) ;
swap( revX[ 1 ] , revX[ 3 ] ) ;
}
else if ( distance == 12 )
{
swap( revX[ 0 ] , revX[ 2 ] ) ;
swap( revX[ 1 ] , revX[ 2 ] ) ;
swap( revX[ 1 ] , revX[ 3 ] ) ;
swap( revX[ 2 ] , revX[ 3 ] ) ;
}
res = reverseCard( revX) ;
res.push_back ( suitCard) ;
return res;
}
class Binh
{
public :
Binh( ) ;
string guess( vector< string> Y) ;
} ;
Binh:: Binh ( ) { }
string Binh:: guess ( vector< string> Y)
{
char suit = getSuit( Y[ 4 ] ) ;
int value = getValue( Y[ 4 ] ) ;
Y.pop_back ( ) ;
vector< string> guess = reverseCard( Y) ;
vector< string> sortGuess = guess;
sort( sortGuess.begin ( ) , sortGuess.end ( ) ) ;
if ( guess[ 0 ] == sortGuess[ 0 ] )
{
if ( guess[ 1 ] == sortGuess[ 1 ] )
{
if ( guess[ 2 ] == sortGuess[ 2 ] )
value + = 1 ;
else
value + = 2 ;
}
else if ( guess[ 1 ] == sortGuess[ 3 ] )
{
if ( guess[ 2 ] == sortGuess[ 2 ] )
value + = 3 ;
else
value + = 4 ;
}
}
else if ( guess[ 0 ] == sortGuess[ 1 ] )
{
if ( guess[ 1 ] == sortGuess[ 0 ] )
{
if ( guess[ 2 ] == sortGuess[ 2 ] )
value + = 5 ;
else
value + = 6 ;
}
else if ( guess[ 1 ] == sortGuess[ 3 ] )
{
if ( guess[ 2 ] == sortGuess[ 2 ] )
value + = 7 ;
else
value + = 8 ;
}
}
else if ( guess[ 0 ] == sortGuess[ 2 ] )
{
if ( guess[ 1 ] == sortGuess[ 0 ] )
{
if ( guess[ 2 ] == sortGuess[ 1 ] )
value + = 9 ;
else
value + = 10 ;
}
else if ( guess[ 1 ] == sortGuess[ 3 ] )
{
if ( guess[ 2 ] == sortGuess[ 1 ] )
value + = 11 ;
else
value + = 12 ;
}
}
if ( value == 14 ) return "Q" + suit;
if ( value == 13 ) return "K" + suit;
if ( value == 12 ) return "J" + suit;
if ( value == 11 ) return "A" + suit;
return to_string( value) + suit;
}
int main( )
{
An an;
Binh binh;
vector< string> v = { "3T" , "3C" , "4H" , "AP" , "KT" , "JT" } ;
//vector <string> a = an.pick(v);
cout << endl << binh.guess ( an.pick ( v) ) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKLy8gQ2hvIG3hu5l0IGLhu5kgYsOgaSA1MiBsw6EgdGjDtG5nIHRoxrDhu51uZy4gQ8OhYyBsw6EgYsOgaSDEkcaw4bujYyB4w6FjIMSR4buLbmggYuG7n2kgc+G7kSB2w6AgY2jhuqV0LiBT4buRIMSRxrDhu6NjIMSRw6FuaCBsw6AgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIEosIFEsIEssIEEuIENo4bqldCDEkcaw4bujYyDEkcOhbmggbMOgIFAsIEMsIFQsIEguIFbDrSBk4bulIHF1w6JuIMOBdCBiw61jaCBsw6AgQVAsIHF1w6JuIDcgdMOpcCBsw6AgN0MuIEFuIHbDoCBCw6xuaCBiaeG7g3UgZGnhu4VuIG3hu5l0IHRyw7Ig4bqjbyB0aHXhuq10IG5oxrAgc2F1OgoKLy8gQW4gbOG6pXkgcmEgbeG7mXQgYuG7mSBiw6BpLCBi4bqjbyBraMOhbiBnaeG6oyBjaOG7jW4gNiBsw6EgdMO5eSDDvSBy4buTaSDEkcawYSBs4bqhaSBjaG8gQW4gKGtow7RuZyBjaG8gQsOsbmggYmnhur90KQovLyBBbiDEkcawYSBjaG8gQsOsbmggNSBsw6EgdsOgIGdp4buvIGzhuqFpIG3hu5l0IGzDoSAoa2jDtG5nIGNobyBCw6xuaCBiaeG6v3QgbMOhIG7DoHkpCi8vIELDrG5oIMSRb8OhbiByYSBsw6EgYsOgaSBBbiDEkWFuZyBnaeG6pXUgdHLGsOG7m2Mgc+G7sSB0cuG6p20gdHLhu5MgY+G7p2Ega2jDoW4gZ2nhuqMKLy8gRMSpIG5oacOqbiBo4buNIGzDoCBt4buZdCBj4bq3cCBkaeG7hW4gxINuIMO9LCB0csaw4bubYyDEkcOzIGjhu40gxJHDoyB0aOG7kW5nIG5o4bqldCBjaGnhur9uIHRodeG6rXQgduG7m2kgbmhhdS4gTmhp4buHbSB24bulIGPhu6dhIGLhuqFuIGzDoCBnaeG6oyBs4bqtcCBs4bqhaSB0csOyIOG6o28gdGh14bqtdCBuw6B5LCBi4bqxbmcgY8OhY2ggdmnhur90IGhhaSBjbGFzcyBBbiB2w6AgQmluaDoKLy8gY2xhc3MgQW4gZ+G7k206CgovLyBIw6BtIGto4bufaSB04bqhbyBt4bq3YyDEkeG7i25oLgovLyBIw6BtIHZlY3RvcjxzdHJpbmc+IHBpY2sodmVjdG9yPHN0cmluZz4gWCkgxJHhu4MgY2jhu41uIGPDoWMgbMOhIGLDoGkgxJHhu4MgxJHGsGEgY2hvIELDrG5oOiBOaOG6rW4gxJHhuqd1IHbDoG8gWAovLyAgbMOgIDYgbMOhIGLDoGkgbcOgIGtow6FuIGdp4bqjIGNo4buNbiwgdHLhuqMgcmEgWQovLyAgbMOgIGRhbmggc8OhY2ggY8OhYyBsw6EgYsOgaSBz4bq9IMSRxrBhIGNobyBCw6xuaC4KLy8gY2xhc3MgQmluaCBn4buTbToKCi8vIEjDoG0ga2jhu59pIHThuqFvIG3hurdjIMSR4buLbmguCi8vIEjDoG0gc3RyaW5nIGd1ZXNzKHZlY3RvcjxzdHJpbmc+IFkpIMSR4buDIMSRb8OhbiBsw6EgYsOgaSBjw7JuIGzhuqFpIG3DoCBBbiDEkWFuZyBnaeG7rzogTmjhuq1uIMSR4bqndSB2w6BvIFkKLy8gIGzDoCBr4bq/dCBxdeG6oyB0cuG6oyB24buBIGPhu6dhIGjDoG0gcGljayBuw7NpIHRyw6puLCB0cuG6oyByYSBt4buZdCBsw6EgYsOgaSBsw6AgbMOhIG3DoCBBbiDEkWFuZyBnaeG7ry4KLy8gQ8OhYyBow6BtIHRyw6puIGPhuqduIMSR4buDIHB1YmxpYy4gU2luaCB2acOqbiDEkcaw4bujYyBwaMOpcCB2aeG6v3QgdGjDqm0gY8OhYyBow6BtIHbDoCBiaeG6v24ga2jDoWMgbuG6v3UgY+G6p24sIHR14buzIHRodeG7mWMgdsOgbyB0aGnhur90IGvhur8gY+G7p2EgbcOsbmguIEtoaSBjaOG6pW0gYsOgaSwgdHLDrG5oIGNo4bqlbSBz4bq9IGdp4bqjIGzhuq1wIGJ14buVaSBiaeG7g3UgZGnhu4VuIHbDoCBz4butIGThu6VuZyBjw6FjIGjDoG0gZG8gc2luaCB2acOqbiB2aeG6v3QuIFZp4buHYyB0aOG7sWMgaGnhu4duIHRyw7Ig4bqjbyB0aHXhuq10IG7DoHkgbmjGsCB0aOG6vyBuw6BvIGzDoCBkbyBzaW5oIHZpw6puIHThu7EgdGhp4bq/dCBr4bq/LCB0csOsbmggY2jhuqVtIGNo4buJIGLhuqNvIMSR4bqjbSBz4bq9IMSRxrBhIGNow61uaCB4w6FjIHZlY3RvciBZIHRy4bqjIHbhu4EgY+G7p2EgaMOgbSBwaWNrIGNobyBow6BtIGd1ZXNzLCBuZ2/DoGkgcmEgc+G6vSBraMO0bmcgY2FuIHRoaeG7h3AgZ8OsIHbDoG8gbcO0IGjDrG5oIGPhu6dhIHNpbmggdmnDqm4uCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IGdldFZhbHVlKHN0cmluZyBjYXJkKQp7CiAgICBjYXJkLnBvcF9iYWNrKCk7CiAgICBpZiAoY2FyZCA9PSAiQSIpIHJldHVybiAxMTsKICAgIGlmIChjYXJkID09ICJKIikgcmV0dXJuIDEyOwogICAgaWYgKGNhcmQgPT0gIksiKSByZXR1cm4gMTM7CiAgICBpZiAoY2FyZCA9PSAiUSIpIHJldHVybiAxNDsKICAgIHJldHVybiBzdG9pKGNhcmQpOwp9CgpjaGFyIGdldFN1aXQoc3RyaW5nIGNhcmQpCnsKICAgIHJldHVybiBjYXJkLmJhY2soKTsKfQoKdmVjdG9yIDxzdHJpbmc+IHJldmVyc2VDYXJkKHZlY3RvcjxzdHJpbmc+IFgpCnsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgWC5zaXplKCk7IGkrKykKICAgIHsKICAgICAgICByZXZlcnNlKFhbaV0uYmVnaW4oKSwgWFtpXS5lbmQoKSk7CiAgICB9CiAgICByZXR1cm4gWDsKfQoKCgpjbGFzcyBBbgp7CiAgICBwdWJsaWM6CiAgICAgICAgQW4oKTsKICAgICAgICB2ZWN0b3I8c3RyaW5nPiBwaWNrKHZlY3RvciA8c3RyaW5nPiBYKTsgCn07CgpBbjo6QW4oKXt9Cgp2ZWN0b3I8c3RyaW5nPiBBbjo6cGljayh2ZWN0b3I8c3RyaW5nPiBYKQp7CiAgICBpbnQgcG9zID0gMDsKICAgIHZlY3RvcjxzdHJpbmc+IHJlczsKICAgIHZlY3RvcjxzdHJpbmc+IHJldlggPSByZXZlcnNlQ2FyZChYKTsKICAgIHNvcnQocmV2WC5iZWdpbigpLCByZXZYLmVuZCgpKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmV2WC5zaXplKCkgLSAxOyBpKyspCiAgICB7CiAgICAgICAgaWYgKHJldlhbaV1bMF0gIT0gcmV2WFtpICsgMV1bMF0pIGNvbnRpbnVlOwogICAgICAgIHBvcyA9IGk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBzdHJpbmcgc3VpdENhcmQgPSByZXZYW3Bvc107CiAgICByZXZlcnNlKHN1aXRDYXJkLmJlZ2luKCksIHN1aXRDYXJkLmVuZCgpKTsKICAgIHN0cmluZyBwaWNrQ2FyZCA9IHJldlhbcG9zICsgMV07CiAgICByZXZlcnNlKHBpY2tDYXJkLmJlZ2luKCksIHBpY2tDYXJkLmVuZCgpKTsKCiAgICBpbnQgZGlzdGFuY2UgPSBnZXRWYWx1ZShwaWNrQ2FyZCkgLSBnZXRWYWx1ZShzdWl0Q2FyZCk7CiAgICByZXZYLmVyYXNlKHJldlguYmVnaW4oKSArIHBvcywgcmV2WC5iZWdpbigpICsgcG9zICsgMik7CgogICAgaWYgKGRpc3RhbmNlID09IDIpCiAgICB7CiAgICAgICAgc3dhcChyZXZYWzJdLCByZXZYWzNdKTsKICAgIH0KICAgIGVsc2UgaWYgKGRpc3RhbmNlID09IDMpCiAgICB7CiAgICAgICAgc3dhcChyZXZYWzFdLCByZXZYWzNdKTsKICAgIH0KICAgIGVsc2UgaWYgKGRpc3RhbmNlID09IDQpCiAgICB7CiAgICAgICAgc3dhcChyZXZYWzFdLCByZXZYWzNdKTsKICAgICAgICBzd2FwKHJldlhbMl0sIHJldlhbM10pOwogICAgfQogICAgZWxzZSBpZiAoZGlzdGFuY2UgPT0gNSkKICAgIHsKICAgICAgICBzd2FwKHJldlhbMF0sIHJldlhbMV0pOwogICAgfQogICAgZWxzZSBpZiAoZGlzdGFuY2UgPT0gNikKICAgIHsKICAgICAgICBzd2FwKHJldlhbMF0sIHJldlhbMV0pOwogICAgICAgIAogICAgICAgIHN3YXAocmV2WFsyXSwgcmV2WFszXSk7CiAgICB9CiAgICBlbHNlIGlmIChkaXN0YW5jZSA9PSA3KQogICAgewogICAgICAgIHN3YXAocmV2WFswXSwgcmV2WFsxXSk7CiAgICAgICAgCiAgICAgICAgc3dhcChyZXZYWzFdLCByZXZYWzNdKTsKICAgIH0KICAgIGVsc2UgaWYgKGRpc3RhbmNlID09IDgpCiAgICB7CiAgICAgICAgc3dhcChyZXZYWzBdLCByZXZYWzFdKTsKICAgICAgICAKICAgICAgICBzd2FwKHJldlhbMV0sIHJldlhbM10pOwogICAgICAgIHN3YXAocmV2WFsyXSwgcmV2WFszXSk7CiAgICB9CiAgICBlbHNlIGlmIChkaXN0YW5jZSA9PSA5KQogICAgewogICAgICAgIHN3YXAocmV2WFswXSwgcmV2WFsyXSk7CiAgICAgICAgc3dhcChyZXZYWzFdLCByZXZYWzJdKTsKICAgIH0KICAgIGVsc2UgaWYgKGRpc3RhbmNlID09IDEwKQogICAgewogICAgICAgIHN3YXAocmV2WFswXSwgcmV2WFsyXSk7CiAgICAgICAgc3dhcChyZXZYWzFdLCByZXZYWzJdKTsKCiAgICAgICAgc3dhcChyZXZYWzJdLCByZXZYWzNdKTsKICAgIH0KICAgIGVsc2UgaWYgKGRpc3RhbmNlID09IDExKQogICAgewogICAgICAgIHN3YXAocmV2WFswXSwgcmV2WFsyXSk7CiAgICAgICAgc3dhcChyZXZYWzFdLCByZXZYWzJdKTsKCiAgICAgICAgc3dhcChyZXZYWzFdLCByZXZYWzNdKTsKICAgIH0KICAgIGVsc2UgaWYgKGRpc3RhbmNlID09IDEyKQogICAgewogICAgICAgIHN3YXAocmV2WFswXSwgcmV2WFsyXSk7CiAgICAgICAgc3dhcChyZXZYWzFdLCByZXZYWzJdKTsKCiAgICAgICAgc3dhcChyZXZYWzFdLCByZXZYWzNdKTsKICAgICAgICBzd2FwKHJldlhbMl0sIHJldlhbM10pOwogICAgfQogICAgcmVzID0gcmV2ZXJzZUNhcmQocmV2WCk7CiAgICByZXMucHVzaF9iYWNrKHN1aXRDYXJkKTsKICAgIHJldHVybiByZXM7Cn0KCmNsYXNzIEJpbmgKewogICAgcHVibGljOiAKICAgICAgICBCaW5oKCk7CiAgICAgICAgc3RyaW5nIGd1ZXNzKHZlY3RvcjxzdHJpbmc+IFkpOwp9OwoKQmluaDo6QmluaCgpe30KCnN0cmluZyBCaW5oOjpndWVzcyh2ZWN0b3I8c3RyaW5nPiBZKQp7CiAgICBjaGFyIHN1aXQgPSBnZXRTdWl0KFlbNF0pOwogICAgaW50IHZhbHVlID0gZ2V0VmFsdWUoWVs0XSk7CiAgICBZLnBvcF9iYWNrKCk7CiAgICB2ZWN0b3I8c3RyaW5nPiBndWVzcyA9IHJldmVyc2VDYXJkKFkpOwogICAgdmVjdG9yPHN0cmluZz4gc29ydEd1ZXNzID0gZ3Vlc3M7CiAgICBzb3J0KHNvcnRHdWVzcy5iZWdpbigpLCBzb3J0R3Vlc3MuZW5kKCkpOwoKICAgIGlmIChndWVzc1swXSA9PSBzb3J0R3Vlc3NbMF0pCiAgICB7CiAgICAgICAgaWYgKGd1ZXNzWzFdID09IHNvcnRHdWVzc1sxXSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChndWVzc1syXSA9PSBzb3J0R3Vlc3NbMl0pCiAgICAgICAgICAgICAgICB2YWx1ZSArPSAxOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB2YWx1ZSArPSAyOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChndWVzc1sxXSA9PSBzb3J0R3Vlc3NbM10pCiAgICAgICAgewogICAgICAgICAgICBpZiAoZ3Vlc3NbMl0gPT0gc29ydEd1ZXNzWzJdKQogICAgICAgICAgICAgICAgdmFsdWUgKz0gMzsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdmFsdWUgKz0gNDsKICAgICAgICB9CiAgICB9CgogICAgZWxzZSBpZiAoZ3Vlc3NbMF0gPT0gc29ydEd1ZXNzWzFdKQogICAgewogICAgICAgIGlmIChndWVzc1sxXSA9PSBzb3J0R3Vlc3NbMF0pCiAgICAgICAgewogICAgICAgICAgICBpZiAoZ3Vlc3NbMl0gPT0gc29ydEd1ZXNzWzJdKQogICAgICAgICAgICAgICAgdmFsdWUgKz0gNTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdmFsdWUgKz0gNjsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoZ3Vlc3NbMV0gPT0gc29ydEd1ZXNzWzNdKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGd1ZXNzWzJdID09IHNvcnRHdWVzc1syXSkKICAgICAgICAgICAgICAgIHZhbHVlICs9IDc7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHZhbHVlICs9IDg7CiAgICAgICAgfQogICAgfQoKICAgIGVsc2UgaWYgKGd1ZXNzWzBdID09IHNvcnRHdWVzc1syXSkKICAgIHsKICAgICAgICBpZiAoZ3Vlc3NbMV0gPT0gc29ydEd1ZXNzWzBdKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGd1ZXNzWzJdID09IHNvcnRHdWVzc1sxXSkKICAgICAgICAgICAgICAgIHZhbHVlICs9IDk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHZhbHVlICs9IDEwOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChndWVzc1sxXSA9PSBzb3J0R3Vlc3NbM10pCiAgICAgICAgewogICAgICAgICAgICBpZiAoZ3Vlc3NbMl0gPT0gc29ydEd1ZXNzWzFdKQogICAgICAgICAgICAgICAgdmFsdWUgKz0gMTE7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHZhbHVlICs9IDEyOwogICAgICAgIH0KICAgIH0KICAgIAogICAgaWYgKHZhbHVlID09IDE0KSByZXR1cm4gIlEiICsgc3VpdDsKICAgIGlmICh2YWx1ZSA9PSAxMykgcmV0dXJuICJLIiArIHN1aXQ7CiAgICBpZiAodmFsdWUgPT0gMTIpIHJldHVybiAiSiIgKyBzdWl0OwogICAgaWYgKHZhbHVlID09IDExKSByZXR1cm4gIkEiICsgc3VpdDsKICAgIHJldHVybiB0b19zdHJpbmcodmFsdWUpICsgc3VpdDsKfQoKCgppbnQgbWFpbigpCnsKICAgIEFuIGFuOwogICAgQmluaCBiaW5oOwogICAgdmVjdG9yPHN0cmluZz4gdiA9IHsiM1QiLCAiM0MiLCAiNEgiLCAiQVAiLCAiS1QiLCAiSlQifTsKICAgIC8vdmVjdG9yIDxzdHJpbmc+IGEgPSBhbi5waWNrKHYpOwogICAgY291dCA8PCBlbmRsIDw8IGJpbmguZ3Vlc3MoYW4ucGljayh2KSk7CgogICAgcmV0dXJuIDA7Cn0=