ফুরিয়ার সিরিজ এবং ফুরিয়ার ট্রান্সফর্ম -০১
ফাঁকা বিকেল পেয়েছি। হাওয়া একটু বদলানো যাক। সায়েন্সফিকশনই বরং লিখে ফেলি। প্রিয় লেখক প্রফেসর জাফর ইকবালের নোমেনক্ল্যাচার অনুসরণে গল্পের নায়কের নাম রুহান্রুহান। মহাকাশযানের কন্ট্রোল প্যানেলে ইঞ্জিনের মৃদু গুঞ্জন শোনা যাচ্ছে। রুহান্রুহান বিশাল জানালা দিয়ে অনন্তনক্ষত্রবীথির দিকে তাকিয়ে আছে। হঠাৎ কমিউনিকেশন মডিউলের বাতি জ্বলে উঠল। সুইচ অন করতেই চমকে উঠল রুহান্রুহান! ঢাকা বিশ্ববিদ্যালয় গণিত বিভাগের ভাইভা বোর্ড থেকে ফোন! তাকে বলা হল, “বাবা, একটা ভেক্টর এঁকে দেখাও তো?” রুহান্রুহান ভড়কে গেল। সে ত্রিমাত্রিক প্রাণী নয়। চতুর্মাত্রিকও নয়। সে বহুমাত্রিক। তার বোধগম্য জগত দৈর্ঘ্য-প্রস্থ-উচ্চতার মধ্যে সীমাবদ্ধ নয়। তার জগত ইনফাইনাইট ডাইমেনশনাল। ভেক্টর বলতে সে মানবজাতির মত ওয়ালা জিনিস গুলোকেও বোঝেনা। তার কাছে একেকটা ভেক্টর হচ্ছে একেকটা ফাংশন। তার বেসিস সেট … অসীম, অনন্ত, অনন্ত জলিল!
রুহান্রুহান তার অসংখ্যমাত্রিক জগতে একটা ফাংশনের ছবি আঁকতে বসল। -অক্ষ বরাবর একটু এগোল, বরাবর একটু হাঁটল, বরাবর আরেকটু.. এভাবে অনন্ত অসীম ডাইমেনশন বরাবর একটু একটু করে হেঁটে শেষ পর্যন্ত রুহান্রুহান ফাংশনটা খুঁজে পেল কিনা, ভাইভায় পাশ নম্বর উঠল কিনা জানতে চাইলে চোখ রাখুন ভবিষ্যতের কোন একুশে বইমেলায়। আমার লেখা সায়েন্সফিকশন “রুহান্রুহানের অনন্তবেসিস হন্টন” বেস্টসেলারে পরিণত হবার আগে একটু পুরানো গল্প করা যাক।
ফার্স্টইয়ার-সেকেন্ডইয়ারে “ফুরিয়ার” শব্দটা নিয়ে আমার খুব আগ্রহ ছিল। ওটা যখন পড়ব, তখন বড় হয়ে যাব – প্রজাতির একটা ভাব। থার্ডইয়ারে প্রচন্ড উৎকন্ঠা নিয়ে একদিন ক্লাসে বসলাম। কিন্তু তারপর ফুরিয়ার সিরিজের নামে যখন
-এই সব জিনিস পত্র বোর্ডে হানা দিতে শুরু করল, তখন মনে হতে লাগল প্রতিদিন জনাব জোসেফ ফুরিয়ার পায়চারি করার উদ্দেশ্যে কবর থেকে উঠে এসে রুটিনকরে আমার দু’গালে দুটো চড় কষিয়ে যাচ্ছেন। ফুরিয়ার সিরিজ, ফুরিয়ার ট্রান্সফর্ম – শব্দগুচ্ছ গুলো নিয়ে ভয়-ভিতি জমা হতে থাকল।
সেই ভয়-ভিতি আমার এখনো কাটেনি। হিট ইকুয়েশন, সিগনাল প্রসেসিং, অডিও কম্প্রেশন, DNA-সিকুয়েন্স এ্যানালিসিস, সমুদ্রের ঢেউ এনালিসিস, হেন এ্যানালিসিস, তেন এ্যানালিসিস – এসবের কিছুই আমি জানিনা। আমি শুধু কোয়ান্টাম মেক্যানিক্সে ফুরিয়ার ট্রান্সফর্মের অতি সামান্য গল্প জানি। সে গল্প আরেকদিন করব। আজকে একফোটা কোয়ন্টাম মেক্যানিক্সও লাগবেনা। আজকে লাগবে কাগজকলম আর আমাদের গল্পের নায়ক রুহান্রুহান।
একটা ইনফাইনাইট সিরিজের কথা চিন্তা করুন। নিশ্চয়ই চোখে ভাসছে
-এই ধরনের কিছুর ছবি। উপরের সিরিজে টার্মের সংখ্যা অসংখ্য। গুলোকে আমরা কোইফিশিয়েন্ট নামে ডাকি, আর গুলোকে ভ্যারিয়েবলস। এবার আমাদের চিরচেনা কার্টেসিয়ান কোঅর্ডিনেটে একটা ভেক্টর কল্পনা করুন। যেমন খুশি তেমন ভেক্টরঃ
এটাকে কি একটা ফাইনাইট সিরিজ হিসেবে ভাবা যায়না? নিশ্চয়ই যায়!
-এই ধরনের কিছুর ছবি। উপরের সিরিজে টার্মের সংখ্যা অসংখ্য। গুলোকে আমরা কোইফিশিয়েন্ট নামে ডাকি, আর গুলোকে ভ্যারিয়েবলস। এবার আমাদের চিরচেনা কার্টেসিয়ান কোঅর্ডিনেটে একটা ভেক্টর কল্পনা করুন। যেমন খুশি তেমন ভেক্টরঃ
এটাকে কি একটা ফাইনাইট সিরিজ হিসেবে ভাবা যায়না? নিশ্চয়ই যায়!
যেখানে এবং .
এর -ভ্যারিয়েবল গুলোকে আমরা বেসিস নামে ডাকি। লিনিয়ার এ্যালজ্যাব্রা থেকে আমরা শিখেছি, ভদ্রভাষায় ‘কে গুলোর লিনিয়ার কম্বিনেশন বলে। গুলোর ইচ্ছেমত মান নিয়ে এরকম যত লিনিয়ার কম্বিনেশন সম্ভব সেই সবগুলো লিনিয়ার কম্বিনেশনের কালেকশনকে আমরা একটা স্পেস বলি। এবং বলি, স্পেসটা -এর বেসিসে তৈরি হয়েছে । -এর ক্ষেত্রে সেই স্পেসটা আমাদের পরিচিত ত্রিমাত্রিক জগত। সেটে ভেক্টরের সংখ্যা তিনটে। তাই এই স্পেসের ডাইমেনশন তিন। আমাদের চেয়ে উন্নত কোন চতুর্মাত্রিক প্রাণী থেকে থাকলে তাদের জন্য পরিচিত জগতের ডাইমেনশন চার। প্রাণী যদি অতিরিক্ত উন্নত হয়, সে যদি অসংখ্য ডাইমেনশন পারসীভ করতে পারে, তাহলে তার জগত ইনফাইনাইট ডাইমেনশনাল। স্বভাবতই, রুহান্রুহান যদি একটা ভেক্টর লিখতে চায়, তাহলে ইকুয়েশন ছাড়া তার গতি নেই। কত গুলো বেসিসই বা লিখবে? অসংখ্য তো! প্রশ্ন হল এরকম ইনফাইনাইট ডাইমেনশনাল রুহান্রুহানীয় স্পেস কি বাস্তব সম্মত?
এবার সায়েন্সফিকশনের হাঁড়ি ভেঙে দিচ্ছি। ও ব্যাটা রুহান্রুহান আসলে ফুরিয়ার বেসিসের প্রাণী। আমাদের বেসিস যেমন , তার বেসিস তেমনি
-এই প্রজাতির। কিন্তু সে আবার কেমন কথা! আমরা জেনে এসেছি, বেসিস সেটের ভেক্টর গুলো একটা আরেকটার সাথে অর্থোগনাল। অর্থাৎ তাদের মধ্যেকার ইনার প্রোডাক্ট শূন্য। এই সাইন-কোসাইন ফাংশন গুলোর জন্যও কি ইনারপ্রডাক্ট শুন্য নাকি?
-এই প্রজাতির। কিন্তু সে আবার কেমন কথা! আমরা জেনে এসেছি, বেসিস সেটের ভেক্টর গুলো একটা আরেকটার সাথে অর্থোগনাল। অর্থাৎ তাদের মধ্যেকার ইনার প্রোডাক্ট শূন্য। এই সাইন-কোসাইন ফাংশন গুলোর জন্যও কি ইনারপ্রডাক্ট শুন্য নাকি?
রুহান্রুহানদের ইনার প্রডাক্টের ডেফিনিশনও যে আমাদের ইনারপ্রডাক্টের মত হতে হবে – তা তো না। আমরা দুটো ভেক্টর, আর -এর ইনারপ্রডাক্ট নেই এভাবেঃ
রুহান্রুহানদের বেলায় ইনারপ্রডাক্টের সূত্রটা হলঃ
হিসেবে থেকে যে কোন দুটো ফাংশন নিয়ে -নম্বর যন্ত্রে ঢুকিয়ে দিন, দেখুন রেজাল্ট কি আসে। একটা এখানেই চেষ্টা করে দেখিঃ
হিসেবে থেকে যে কোন দুটো ফাংশন নিয়ে -নম্বর যন্ত্রে ঢুকিয়ে দিন, দেখুন রেজাল্ট কি আসে। একটা এখানেই চেষ্টা করে দেখিঃ
হয়েছে! অন্য কেস গুলোও ঝটপট করে ফেলুন। বা উচ্চমাধ্যমিকের ছাত্রপড়ানোর অভ্যেস থাকলে “ইন্ট্রোডাকশন্টুফুরিয়ারএ্যানালিসিস” নামে তাদের ঘাড়েও চাপিয়ে দিতে পারেন। হলেই ইনারপ্রডাক্ট ভ্যানিশঃ
বদরাগী পাঠক হুংকার দিয়ে উঠবেন, কার্টেসিয়ান বেসিস ভেক্টর গুলোর তো নিজেরদের মধ্যে ইনার প্রডাক্ট নিলে রেজাল্ট হয় . ফুরিয়ার বেসিসে এদেরও কি তাই হয়? চলুন দেখি নিলে ঘটনা কী দাঁড়ায়ঃ
একই ভাবে
তো এলনা। তবে প্রতিবারই যেহেতু আসছে, তাই নো চিন্তা। কান ধরে নরমালাইজ করে দেব! আমার মনে হয় প্রত্যেকটা বেসিস ভেক্টরের সাথে আঠা দিয়ে জুড়ে দিলেই তাদের নিজেদের মধ্যেকার ইনারপ্রডাক্ট হয়ে যাবে। চেক করে দেখুন। নরমালাইজেশন ফ্যাক্টর গুলো মনে রাখা আমার সাধ্যের বাইরে। খালি ভুলে যাই। শুধু এর সাথে বোধ হয় লাগাতে হবে।
গণিতজ্ঞরা কিন্তু বেজায় খুশি। আমরা একটা প্রলয়ঙ্করী কাজ করে ফেলেছি। একটা কমপ্লিট সেট অফ অর্থনর্মাল বেসিস ভেকটরস খুঁজে বার করেছি! প্রশ্ন হল, এই বেসিস ভেক্টরদের লিনিয়ার কম্বিনেশনে রুহান্রুহান’রা কাদেরকে রিপ্রেজেন্ট করবে? উত্তরঃ মোটামুটি সব ভদ্র ফাংশনকে। পিরিওডিক ফাংশন হলে তো কথাই নেই! কন্টিনিউইটিও লাগবেনা। পিসওয়াইজ কন্টিনিউয়াস হলেই চলবে। আর পিরিওডিক যদি না হয়, তবুও চলবে, তবে তখন আমাদের ফুরিয়ার ট্রান্সফর্মের চাল চালতে হবে। কিন্তু কাজ গুলো সম্ভব হবে কিভাবে?
সে গল্প পরের পোস্টে। অসম্ভবকে সম্ভব করাই তো রুহান্রুহানের কাজ!
নায়ক রুহান্রুহানকে ওয়েটিং লিস্টে বসিয়ে রেখেছি। ততখন Spatial Frequency নামক রহস্যময় একটা জিনিসের সুরাহা করা যাক। যাদের কাছে ফিজিক্স দুই চোখের বিষ, তাদের বিরক্ত হওয়ার কোন কারন নেই। সরল দোলক টোলক নিয়ে বসে পড়বনা। আজকে শুধু আঁকিবুকি করব। রংতুলি হচ্ছে আমার অতিপ্রিয় ডেসমস। আঁকা শুরু করলাম!
একটু নিচের ফাংশনটার দিকে তাকান।
আমাদের অতি নিরিহ সাইন ওয়েভের গ্রাফ। বামদিকে এর পর আর আঁকিনি। ডান দিকেও এর পর থেমে গেছি। কারণ আঁকার কোন প্রয়োজন নাই। একই ছবি সারা জীবন ধরে বামে ডানে রিপিট করে যাবে। ভদ্রভাষায় আমরা বলি, একটা পিরিওডিক ফাংশন। যতটুকু জায়গা পরপর সে নিজেকে রিপিট করছে, তাকে আমরা বলি পিরিওড। উপরের ছবিতে গ্রাফটার পিরিওড হচ্ছে গিয়েঃ
এর সাথে একটা লাগিয়ে দিলে কেমন হয়? নতুন কী ঘটনা ঘটে দেখা যাকঃ
প্রায় একই রকম ছবি, কিন্তু এর ছবিতে -ইন্টারভেলের মধ্যে একটাই ওয়েভ ছিল। এর ছবিতে একই ইন্টারভেলে দু’টো ওয়েভ চলে এসেছে। তাহলে কী -এর ছবিতে -এর ভেতর তিনটে ওয়েভ থাকবে?
অবশ্যই! অতিআগ্রহে এর গ্রাফটাও এঁকে ফেললাম। গুনে দেখুন, -এর ভেতর দশটা ওয়েভ। নো সারপ্রাইজ। আমরা দৃঢ় কণ্ঠে ঘোষণা করতেই পারি, এর গ্রাফে -ইন্টারভেলে -টা ওয়েভ থাকবে। স্বাভাবিক ভাবেই এই ‘কে ইংরেজিতে ওয়েভনাম্বার বলে। এর আরেকটা নাম আছে। সেটা হল “স্পেইশাল ফ্রিকুয়েন্সি” । তাহলে ভদ্রভাষায়, -এর স্পেইশাল ফ্রিকুয়েন্সি বা আপাতত, শুধু ফ্রিকুয়েন্সি হচ্ছে .
সুপারপোজিশনের ধারনা কার কার আছে হাত তুলুন। যারা হাত তুলেছেন, তারা ঘুমিয়ে পড়ুন। যারা তোলেননি, তাদের শিখতে দুই মিনিট লাগবে। দুটো ওয়েভের সুপারপোজিশন মানে একটার ফাংশনভ্যালুর সাথে আরেকটার ফাংশনভ্যালুর যোগ করে দেওয়া। আর কিছুইনা। ইচ্ছেমত কয়েকটা ফাংশন চিন্তা করুন। আমার মাথায় এই মুহুর্তে চারটা ফাংশন এলঃ
আলাদা আলাদা করে আঁকলে ফাংশন গুলোর গ্রাফ হবে এরকমঃ
আলাদা আলাদা করে আঁকলে ফাংশন গুলোর গ্রাফ হবে এরকমঃ
কিন্তু এগুলোকে যোগ করে দিয়ে যদি একটা ফাংশন বানিয়ে ফেলি, অর্থাৎ একটার ওপর আরেকটা সুপারপোজ করি, তাহলে ফাংশনটা দাঁড়াবে
এই হচ্ছে গিয়ে সুপারপজিশন। একটার ওপর আরেকটা ফেলে যোগ করে দেওয়া। ডান দিকে ডাব্লিউ-এর মত দেখতে কোয়ার্টিক ফাংশনটাই হল অন্য গুলোর লিনিয়ার সুপারপোজিশন, বা লিনিয়ার কম্বিনেশন।
বলুন দেখি, আর ফাংশনদুটোর সুপারপজিশনের গ্রাফটা কেমন হবে? নিঃসন্দেহে সবুজরঙের সরল রেখা!
এবার আসল কাজে আসা যাক। আমরা এখন বিভিন্ন ফ্রিকুয়েন্সির সাইনফাংশনকে ধরে ধরে সুপারপোজ করব। অর্থাৎ ’র বিভিন্ন ভ্যালুর জন্য -এর লিনিয়ার কম্বিনেশন নেব। হচ্ছে কোইফিশিয়েন্টস। আর গুলো হচ্ছে বেসিস। যারা এর আগের পোস্টটা পড়েছেন, তারা নিশ্চয়ই বুঝতে পারছেন আমরা কী করতে যাচ্ছি। আমরা রুহান্রুহানদের স্পেসে ভেক্টর আঁকতে যাচ্ছি!
প্রথমে দশটা আলাদা আলাদা ফ্রিকুয়েন্সির সাইনওয়েভকে সুপারপোজ করলে কী পাওয়া যায় দ্যাখা যাকঃ
চমৎকার! উপরের ছবিটা জেনারেটেড হওয়ার ধাপ গুলো হচ্ছে এরকমঃ
আমরা আসলে এতখন ১০ ডাইমেনশনে ফুরিয়ার বেসিসে একটা ভেক্টর তৈরি করেছি। যেই ছবিটা এঁকেছি, সেটা কি একটা দশ-মাত্রিক ছবি? অবশ্যই না! তবে ছবির ফাংশনটা ফুরিয়ার স্পেসে একটা দশমাত্রিক বস্তু, বা ভদ্রভাষায়, ভেক্টর। দশ মাত্রার ঐ স্পেসে এরকম অসংখ্য বস্তু পাওয়া যাবে নিশ্চিত, এবং প্রতিটাই সাইনওয়েভের এই দশটা ফ্রিকুয়েন্সি দিয়ে জেনারেটেড হবে। যেমন আরেকটা দশমাত্রিক বস্তু হল এটাঃ
এবার বেসিস গুলোতে কোসাইন ফাংশন গুলোও নিয়ে আসি। সাইনের ৫টা আর কোসাইনের ৫টা ওয়েভের একটা যেমনখুশিতেমন-লিনিয়ার-কম্বিনেশনে কী আসতে পারে?
ওরে বাবা! হররমুভিটাইপের গ্রাফ চলে এসেছে। :/
সুতরাং দ্যাখা যাচ্ছে, বিভিন্ন ফ্রিকুয়েন্সির সাইন-কোসাইন ফাংশনের বিভিন্ন লিনিয়ার কম্বিনেশনে আমরা অদ্ভুত অদ্ভুত সব গ্রাফ পাচ্ছি।
অভিনন্দন! আপনি ফুরিয়ার সিরিজের ৯৫% ব্যাপার-স্যাপার বুঝে গেছেন! এতক্ষন আমরা যেসব ফাংশনের ছবি আঁকলাম, এই বা শেষ ছবির বেগুনি রঙের গ্রাফের ঐ সাইন-কোসাইন এর হররমুভি কম্বিনেশনটা – প্রতিটাই আসলে একেকটা ফুরিয়ার সিরিজ। আমরা ইনফাইনাইট সংখ্যক টার্ম নেইনি, প্রথমদিকের কয়েকটা টার্ম নিয়ে কাজ সেরেছি। এখন প্রশ্ন হল, ইনফাইনাইট সংখ্যক, বা অন্তত অনেক অনেক বেশি সংখ্যক টার্ম নিয়ে আমরা ফুরিয়ার সিরিজ দিয়ে এরকম কোন কোন ফাংশনের ছবি আঁকতে পারি? উত্তরঃ সব পিরিওডিক ফাংশনের! আমরা দু’একটা উদাহরন কোমর বেঁধে করব। তার আগে একটু সংজ্ঞা থেকে ঘুরে আসি।
বেগুনী রঙের হররমুভি ফাংশনটা আরেকবার দেখুনঃ
আগের পোস্টের ১ নম্বর সমীকরণে দেওয়া ফুরিয়ার সিরিজের ডেফিনিশনের সাথে এর কী কী পার্থক্য? একবার দেখে আসুনতো দেখি? নেট স্লো হলে আমিই বলে দিচ্ছি। কোন পার্থক্য নেই। এটা একজ্যাক্টলি ওই ডেফিনিশন। আমাদের বেগুনী রঙের ফাংশনের ক্ষেত্রে স্পেসিফিক ব্যাপার গুলো হচ্ছে,
বুদ্ধিমান পাঠক এতক্ষণে নিশ্চয়ই বুঝে গেছেন, একটা পিরিওডিক ফাংশন – সে অদ্ভুতুড়ে বা ভূতভূতুড়ে – যেমনই হোকনা কেন, তাকে এ্যাপ্রক্সিমেট করার জন্য ফুরিয়ার সিরিজ একটা খুবই শক্তিশালি অস্ত্র। জোসেফ ফুরিয়ার হীট ইকুয়েশনের সলিউশন বের করতে এরকম সাইন-কোসাইন ওয়েভের লিনিয়ার কম্বিনেশনের আইডিয়া দিয়েছিলেন এবং ফুরিয়ার সিরিজ জিনিসটা ফর্মালি জন্ম নিয়েছিল। তবে ফুরিয়ার এ্যানালিসিসের সব কিছু কিন্তু জোসেফ ফুরিয়ারের একার করা নয়। কিচ্ছু ভাবনা চিন্তা না করেই এরকম সিরিজ ব্যবহার করেছিলেন প্রাচীন গ্রীক এ্যাস্ট্রোনমারেরা তাঁদের দেওয়া গ্রহ-উপগ্রহের অরবিটের মডেল ব্যাখ্যা করতে। আমি ডিটেইল ক্যালকুলেশনটা করিনি। একসময় পড়ে লিখে রাখব দু’এক লাইন। কেউ জানতে চাইলে Ptolemy, Epicycle – এই শব্দ গুলো গুগল করে ফেলুন। চমৎকার কিছু এ্যানিমেশনও পেয়ে যাবেন। তো যাহোক, ম্যাথম্যাটিকাল জায়ান্ট বলতে আমারা যাঁদের চিনি, সেসময় মোটামুটি তাঁদের সবাই এটা নিয়ে টানাহ্যাঁচড়া করেছেন। অয়লার, লাগ্রাঞ্জ, ডা’লম্বেয়ার্ট, গাউস, ডিরখলেট, রীমান, কাকে বাদ দেব? ফুরিয়ারের কন্ট্রিবিউশনটা সম্ভবত শুধু ঐ ক্লেইমটাতে, যে, পিসওয়াইজ ফাংশন গুলো বিভিন্ন ফ্রিকুয়েন্সির সাইন কোসাইনের লিনিয়ার সুপারপোজিশনে প্রকাশ করা যাবে।
এখনকার পৃথিবীর টেকনোলজির এই চরম উন্নতির পেছনে ফুরিয়ার এ্যানালিসিসের কন্ট্রিবিউশনের পরিমাণ ভয়ানক। টেকনোলজি যদি বাদও দেই, আমাদের প্রিয় মস্তিষ্কের অডিটরি সেকশন প্রতিমুহুর্তে ক্রমাগত ফুরিয়ার এ্যানালিসিস করে যাচ্ছে। গান শুনতে শুনতে একুয়ালাইজার দিয়ে সাউন্ডের বেস-ট্রেবল বাড়ানো-কমানো করছেন? আসলে ফুরিয়ার এনালিসিস করছেন। ফটোশপে ছবিকে ফিল্টার দিয়ে আর্ট বানিয়ে ফেলছেন? আসলে ফুরিয়ার এ্যানালিসিস করছেন। কোয়ান্টাম জগতে হাইজেনবার্গের আনসার্টেইন্টি প্রিন্সিপল কাজে লাগাচ্ছেন? আসলে ফুরিয়ার এ্যানালিসিস করছেন। বিশাল আকারের .wav ফরমেটের একটা গানের ফাইলকে পিচ্চি .mp3 ফাইল বানিয়ে ফেলছেন? আসলে ফুরিয়ার এ্যানালিসিস করছেন।
এ্যাপলিকেশন নিয়ে আরেকদিন লিখব। খুব যে ভাল জানি, তা না। তবে চেষ্টা করতে দোষ কী? এবার আগের পোস্টের ২,৩ আর ৪ নম্বর ইকুয়েশন থেকে এর দামড়া ইন্টিগ্রাল গুলোর দিকে তাকিয়ে ফুরিয়ার এ্যানালিসিসের প্রশংসা করতে করতে একটু ভাবুনতো ওগুলোকে কিভাবে কাজে লাগানো যায়?
আমি নায়ক রুহান্রুহানকে তার ইনফাইনাইট ডাইমেনশনাল ফুরিয়ার স্পেসে বিদায় করে শিঘ্রই ফিরছি। end.
0 comments:
Post a Comment