در کارت گرافیک برای بالا بردن سرعت، پردازش بخشهای مختلف به صورت موازی انجام میشود. این پردازشها
را میتوان به شکل یک درخت نشان داد. در این سوال به پردازش درختی از توابع میپردازیم.
به شما یک درخت دودویی از توابع به شکل زیر داده می شود.
![درخت دودویی](https://quera.ir/qbox/download/psBE42OL5B/graph)
هر یال جهتدار به این معناست که تابعی که یال از آن خارج شده باید قبل از تابعی که یال به آن وارد شده
محاسبه شود. (یا میتوان گفت تابع دوم برای انجام محاسباتش نیاز به خروجی تابع اول دارد). توابع در سه لیست `fs` و `gs` و `hs` از طریق کلاس `Functions` به شما داده میشوند (برای مثال، `f[0]` همان $f1$ است). در ضمن توجه داشته باشید که تمام توابع بدون آرگومان ورودی هستند.
فایل [Source](https://quera.ir/qbox/download/JrlDUC35CM/Source.zip) را دانلود کرده و محتوای آن را ببینید و متد `solve` را مطابق با توضیحات زیر پیادهسازی کنید.
شما باید این درخت را به ترتیب زیر پردازش کنید:
+ با چهار ترد با نامهای 1 و 2 و 3 و 4: با ترد $i$ام، $fi$ پردازش شود.
+ با دو ترد با نامهای 1 و 2: با ترد $i$ام، $gi$ پردازش شود.
+ با یک ترد با نام 1: با ترد $i$ام، $hi$ پردازش شود.
دقت کنید که محاسبات هر مرحله (هر طبقه درخت) باید به صورت همزمان انجام شود. (برای مثال $f1$ و $f2$ باید
همزمان محاسبه شوند).
## مثال
با اجرای متد `main` از کلاس `Main` خروجی زیر یکی خروجیهای صحیح محتمل است.
```
F1 by 1 - F4 by 4 - F2 by 2 - F3 by 3 - G1 by 1 - G2 by 2 - H1 by 1 -
```
توجه داشته باشید که تمامی `F`ها قبل از `G`ها و تمامی `G`ها قبل از `H`ها چاپ میشود.
# آنچه باید آپلود کنید.
یک فایل zip که وقتی آن را باز میکنیم، **فقط** فایل ThreadSolution.java را ببینیم.